ABC200C-C++
TLEになったコード
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> vec(n);
for(int i=0;i<n;i++){
cin >> vec.at(i);
}
int count=0;
for(int i=0;i<n-1;i++){
for(int j=i+1 ;j<n;j++){
int c= vec.at(j)-vec.at(i);
if(c % 200 == 0){
count ++;
}
}
}
cout << count << endl;
}
計算量がN^2なので、N>=10^9になるケースがある。
公式解説では i%200とj%200が一致するようなi,jを探す...とのこと
これだと計算量がNになるから大丈夫
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> vec(n);
for(int i=0;i<n;i++){
cin >> vec.at(i);
}
long long amari[205] ={0};
for(int i=0;i<n;i++){
int c=vec.at(i) % 200;
amari[c] ++;
}
int count=0;
for(int i=0; i<200 ; i++){
int d=amari[i];
count += (d*(d-1))/2;
}
cout << count << endl;
}
大丈夫だと思ったんだけどACにならず。
何が悪いのかわかんねええ