1. 程式人生 > >Codeforces Round #500 (Div. 2) ABC

Codeforces Round #500 (Div. 2) ABC

end strong out != with cout ron def include

A. Piles With Stones

水題略

B. And

題意:讓輸入一個n,一個下,之後輸入一個長為n的數組a,可以在a中使a變為a&x,問經過幾次變化數組中有相同的數

思路:當數組中有兩個相同的數時直接輸出0,註意a&x後的數無論在與x經過幾次按位與運算都不會發生變化,

該題有特殊情況,在數據相當大時可能出現錯誤,因此要ans=min(ans,1或2),在這最後系統wa了,難受emmmmm

知識點補充:只有1&1=1

代碼:

#include <bits/stdc++.h>

using namespace std;

int n,x;
long
long a[200000+10],vis[200000+10]; map<long long,long long>mp; map<long long,long long>mp1; int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>n>>x; mp.clear(); for(int i=0;i<n;i++){ cin>>a[i]; mp[a[i]]++; } map<long long,long long
>::iterator it=mp.begin(); for(it;it!=mp.end();it++){ if((it->second)>1){ cout<<"0"<<endl; return 0; } } mp1.clear();int ans=3; for(int i=0;i<n;i++){ int m=a[i]&x; if(mp[m]!=0&&m!=a[i]) { ans
=min(ans,1); } else if(mp1[m]!=0){ ans=min(ans,2); } else mp1[m]++; } if(ans==3) cout<<"-1"<<endl; else cout<<ans<<endl; return 0; }

Codeforces Round #500 (Div. 2) ABC