1013 B. And
生活随笔
收集整理的這篇文章主要介紹了
1013 B. And
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
鏈接
[http://codeforces.com/contest/1013/problem/B]
題意
給你一個(gè)n和x,再給n個(gè)數(shù),有一種操作用x&a[i]取代,a[i],問使其中至少兩個(gè)數(shù)相同,要多少次操作,如果不能輸出-1.
思路
x&a[i],無論&多少次,a[i]都只有一次改變,所以可以知道,有這幾種情況ans=0,1,2,-1;
0表示不需要操作已經(jīng)有兩個(gè)以上的數(shù)相同了,1代表要么x&a[i]==a[j],要么a[i]==x&a[j],i!=j.
2代表x&a[i]==x&a[j],i!=j;
代碼
#include<bits/stdc++.h> using namespace std; int n,x; bool f[100005][2]; int main(){int a;cin>>n>>x;int ans=100000;for(int i=0;i<n;i++){cin>>a;int b=x&a;if(f[a][0]){ans=0;}else if(f[a][1]||f[b][0]){ans=min(ans,1); }else if(f[b][1])ans=min(ans,2);f[a][0]=1;f[b][1]=1;}if(ans==100000){cout<<-1<<endl;return 0;}cout<<ans<<endl;return 0; }轉(zhuǎn)載于:https://www.cnblogs.com/mch5201314/p/9452392.html
總結(jié)
以上是生活随笔為你收集整理的1013 B. And的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为解开耳机线缠绕之谜:科学家把绳子装在盒
- 下一篇: 5177. 【NOIP2017提高组模拟