码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #500 (Div. 2) ABC

时间:2018-07-30 23:32:42      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:int   iterator   i++   amp   nbsp   class   ORC   变化   ret   

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

标签:int   iterator   i++   amp   nbsp   class   ORC   变化   ret   

原文地址:https://www.cnblogs.com/Fy1999/p/9393379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!