当前位置:编程学习 > C/C++ >>

ACdream 1022

这题我开始看的时候没思路,仔细想了想想到怎么做了,因为n是奇数个,所以0和1的个数一定是不同的
第一次提交的时候没有check验证,不过居然过了,后来大神看了我的代码,就发现我的错了
例如当出现某两个数是10 、 01时候,我的代码会将10、 01 和 00 、11混淆,水过了,现在修改了下,没有问题了
只能说我思路不严密,呜呜,真佩服大神
[cpp] 
/************************************************************** 
    Problem: 1022 
    User: yp0408100207 
    Language: C++ 
    Result: Accepted 
    Time:360 ms 
    Memory:3076 kb 
****************************************************************/  
 
 
#include<iostream> 
#include <algorithm> 
#include <cstdio> 
using namespace std; 
 
int a[100001],b[100001]; 
int aa[100001],bb[100001]; 
int ans[50],n,t; 
 
bool Get_ans(int MAX) 

    t=0;//ans[]的长度 
    int i,flaga[2],flagb[2]; 
    while(MAX) 
    { 
        flaga[0]=flaga[1]=0; 
        flagb[0]=flagb[1]=0; 
        for (i=1;i<=n;i++) 
        { 
            flaga[aa[i]%2]++; 
            flagb[bb[i]%2]++; 
            aa[i]>>=1; 
            bb[i]>>=1; 
        } 
        if(flaga[0]==flagb[0]&&flaga[1]==flagb[1]) 
            ans[t++]=0;  
        else if(flaga[0]==flagb[1]&&flaga[1]==flagb[0])  
            ans[t++]=1;  
        else   
            return false;  
        MAX>>=1; 
    } 
    return true; 

 
int Check() 

    int i,ass=0;//计算结果 
    int temp=1; 
    for (i=0;i<t;i++) 
    { 
        ass+=ans[i]*temp; 
        temp*=2; 
    } 
    for (i=1;i<=n;i++)  
        a[i]^=ass;  
    sort(a+1,a+n+1); 
    sort(b+1,b+n+1); 
    for(i=1;i<=n;i++) 
    { 
        if (a[i]!=b[i]) return -1; 
    } 
    return ass; 

 
int main() 

    int i; 
    while(scanf("%d",&n)!=EOF) 
    { 
        int MAX=-1; 
        for (i=1;i<=n;i++) 
        { 
            scanf("%d",&a[i]); 
            aa[i]=a[i]; 
            if (a[i]>MAX) MAX=a[i]; 
        } 
        for(i=1;i<=n;i++) 
        { 
            scanf("%d",&b[i]); 
            bb[i]=b[i]; 
            if (b[i]>MAX) MAX=b[i]; 
        } 
        if(!Get_ans(MAX)) 
        { 
            printf("-1\n"); 
            continue; 
        } 
        printf("%d\n",Check()); 
    } 
    return 0; 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,