[Codeforces] 1013B. And

題目URL: http://codeforces.com/contest/1013/problem/B
我在練習賽時,這題爛在把 '&' 寫成 '&&' 浪費了30分鐘......恨啊~~
我的寫法很耗空間,先用兩個陣列記數,其一去掃過判斷,只要等於2就break***,pretest AC,但最後在main test時又爛掉一次,因為要注意的地方是掃過判斷時,先別急著break(依我的寫法而論)。
(更改敘述接在***後面)把break打掉,改成全部取min,因為特測就是前面有兩個重複,其實後面只要換一個即可,這樣就main test AC了。

#include<bits/stdc++.h>
using namespace std;
map<int,int> str,boo,coo;
main()
{
    int a,b,len=0,ans=2,deter=0,nans;
    cin >> a >> b;
    for(int i=0;i<a;i++)
    {
        cin >> str[i];
        len=max(len,str[i]);
        boo[str[i]]++;
        coo[str[i]]++;
        if(boo[str[i]]>=2)
        {
            deter=1;
        }
    }
    int de;
    if(deter==1)
        cout << 0 << endl;
    else
    {
        for(int i=0;i<=len;i++)
        {
            de=str[i]&b;
            if(de!=str[i])
            {
                boo[de]++;
                if(boo[de]==2)
                {
                    deter=1;
                    nans=boo[de]-coo[de];
                    ans=min(ans,nans);
                }
            }
  
            }
            if(deter==1)
                cout << ans << endl;
            else
            cout << -1 << endl;
        }
    return 0;
}

留言

這個網誌中的熱門文章

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

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

滿是挫傷的ION CAMP