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にならず。

何が悪いのかわかんねええ