程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ACdream 1022

ACdream 1022

編輯:C++入門知識

這題我開始看的時候沒思路,仔細想了想想到怎麼做了,因為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; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved