[Codeforces]1005 C. Summarize to the Power of Two

題目URL: http://codeforces.com/contest/1005/problem/C 

嘛......這題原本最initial的想法是兩兩去湊,但看了看範圍......絕對吃TLE,所以換個思路,反正他只是想找不為2的次方的兩兩和之一數,所以以防CE,我習慣陣列使用map,好習慣(? 然後出現過的數字標一標,掃過去再用*2的迴圈去找2的次方......等小細節判斷,就亮綠燈啦~!
#include<bits/stdc++.h>
using namespace std;
int str[200005];
map <long long , long long> pt;
main()
{
    int num;
    cin >> num;
    for(int i=0;i<num;i++)
    {
        cin >> str[i];
        pt[str[i]]++;
    }
    int com,tot=0;
    for(int i=0;i<num;i++)
    {
         int deter=0;
         com=str[i];
         pt[str[i]]--;
         for(long long j=1;j<2000000000;j*=2)
          {
              if(j<=com)
                  continue;
              if(pt[j-com]>0)
                  deter=1;
          }
         pt[com]++;
         if(deter==0)
             tot++;
    }
    cout << tot << endl;
    return 0;
}

留言

這個網誌中的熱門文章

[ZJ] b229: TOI 2009 第一題:路徑問題

交大資工(APCS組)(面試&心得)

滿是挫傷的ION CAMP