chacoderのブログ

競技プログラミングそのほか

AGC029B Powers of two

atcoder.jp

いろいろ工夫してもどうにもTLEがとれないのですが、現在の到達点として記録しておきます。

mapをうまく使えば高速化できそうな気がします。

また今度トライします。

TLEしたコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  int n;
  cin >> n;
  vector<int>vec;
  int temp=0;
  for (int i = 0; i < n; i++) {
	cin >> temp;
    vec.push_back(temp);
  }
  sort(vec.begin(),vec.end());
  int si=vec.size();
  int cnt=0;
  
  while(1){
    temp=vec.at(si-1);
    if(temp==-1){
      si--;
      if(si==0) break;
      continue;
    }
    for(int i=0;i<si-1;i++){
      if(vec.at(i)==-1) continue;
      if((vec.at(i)+temp)%2 != 0) continue;
      int flag=0;
      for(int j=0;j<32;j++){
        if(vec.at(i)+temp==pow(2,j)){
          flag=1;
          cnt++;
          vec.at(i)=-1;
          break;
        }
       if(vec.at(i)+temp<pow(2,j)){
          break;
        }
      }
      if(flag) break;
    }
    si--;
    if(si==0) break;
  }
  cout<<cnt<<endl;
  return 0;
}