제출 #891034

#제출 시각아이디문제언어결과실행 시간메모리
891034Muhammad_AneeqPairs (IOI07_pairs)C++17
57 / 100
4064 ms31340 KiB
/* بسم الله الرحمن الرحيم Author: (:Muhammad Aneeq:) */ #pragma GCC optimize("O2") #pragma GCC optimize("Ofast") #pragma GCC target("avx,avx2,fma") #include <iostream> #include <map> #include <set> #include <vector> #include <algorithm> using namespace std; #define int long long inline int dis(vector<int>&a,vector<int>&b) { int z=0; for (int j=0;j<b.size();j++) z+=abs(a[j]-b[j]); return z; } inline void solve() { long long B,N,D,M; cin>>B>>N>>D>>M; int a[N][B]; vector<int>mi(B,1e9+10),ma(B,0); map<vector<int>,int>d; for (int i=0;i<N;i++) { for (int j=0;j<B;j++) cin>>a[i][j]; for (int j=0;j<B;j++) { mi[j]=min(mi[j],a[i][j]); ma[j]=max(ma[j],a[i][j]); } } if (dis(mi,ma)<=D) { cout<<(N*(N-1))/2<<endl; return; } if (B==1) { vector<int>z; for (int i=0;i<N;i++) z.push_back(a[i][0]); sort(begin(z),end(z)); int ans=0; for (int i=0;i<N;i++) { int x=upper_bound(begin(z),end(z),z[i]+D)-begin(z); ans+=x-i-1; } cout<<ans<<endl;return; } M=min(M,D); int g=1; for (int i=0;i<B;i++) g*=M; int ans=0; set<vector<int>>s; for (int i=0;i<N;i++) { vector<int>g; for (int j=0;j<B;j++) g.push_back(a[i][j]); d[g]++; s.insert(g); } vector<vector<int>>z={begin(s),end(s)}; int y=z.size(); if (B==2) { // cout<<y<<endl; vector<int>e[ma[0]+10]; for (auto i:z) e[i[0]].push_back(i[1]); for (int i=0;i<y;i++) { for (int j=max(mi[0],z[i][0]-M);j<=min(ma[0],z[i][0]+M);j++) { int f=lower_bound(begin(e[j]),end(e[j]),z[i][1]-(M-abs(z[i][0]-j)))-begin(e[j]); for (int u=f;u<e[j].size();u++) { int k=e[j][u]; vector<int>y={j,k}; int di=dis(z[i],y); if (di<=D) { if (j==z[i][0]&&k==z[i][1]) ans+=d[z[i]]*(d[z[i]]-1); else ans+=d[z[i]]*d[y]; } else break; } } } cout<<ans/2<<endl; return; } for (int i=0;i<z.size();i++) { int g=d[z[i]]; ans+=(g*(g-1))/2; for (int j=i+1;j<z.size();j++) { int di=dis(z[i],z[j]); if (di<=D) ans+=d[z[i]]*d[z[j]]; } } cout<<ans<<endl; } signed main() { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); solve(); }

컴파일 시 표준 에러 (stderr) 메시지

pairs.cpp: In function 'long long int dis(std::vector<long long int>&, std::vector<long long int>&)':
pairs.cpp:19:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |   for (int j=0;j<b.size();j++)
      |                ~^~~~~~~~~
pairs.cpp: In function 'void solve()':
pairs.cpp:86:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |         for (int u=f;u<e[j].size();u++)
      |                      ~^~~~~~~~~~~~
pairs.cpp:106:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  106 |   for (int i=0;i<z.size();i++)
      |                ~^~~~~~~~~
pairs.cpp:110:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  110 |     for (int j=i+1;j<z.size();j++)
      |                    ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...