简单题这里被我弄复杂了,因为确实不想改我原先被hack的代码的原型了。。。最开始没看清题意,a[i]与b[i],至少有一个不同?然后,p数组只要有一个不同于
a并且恰好另一个地方不同于b就行了,代码太复杂了,调试了很久。。
日
#include <iostream> #include <stdio.h> #include <string.h> //#include <> #define siz 1005 using namespace std; int a[siz],b[siz],p[siz]; int n; int vis[siz]; void solve() { memset(vis,0,sizeof(vis)); int ant=0,ans=0,x=0,y=0; for(int i=1; i<=n; i++) { if(a[i]==b[i]) vis[a[i]]++; else { if(x==0) x=i; else y=i; } } for(int i=1; i<=n; i++) { if(vis[i]==0) { if(!ans) ans=i; else ant=i; } } /*memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++){ vis[b[i]]++; if(vis[b[i]]==2){ ant=b[i]; } }*/ //cout<<ans<<" "<<ant<<" "<<y<<endl; int flag=1; for(int i=1; i<=n; i++) { if(vis[a[i]]==1&&a[i]==b[i]) { if(flag) { printf("%d",a[i]); flag=0; } else { printf(" %d",a[i]); } } else{ if(!ans&&ant){ if(flag){ printf("%d",ant); flag=0; } else printf(" %d",ant); } else if(!ant&&ans){ if(flag){ printf("%d",ans); flag=0; } else printf(" %d",ans); } else{ if(ans==a[i]&&ant==b[y]){ if(flag){ printf("%d",ans); flag=0; } else{ printf(" %d",ans); } ans=0; } if(ans==b[i]&&ant==a[y]){ if(flag){ printf("%d",ans); flag=0; } else{ printf(" %d",ans); } ans=0; } if(ant==a[i]&&ans==b[y]){ if(flag){ printf("%d",ant); flag=0; } else{ printf(" %d",ant); } ant=0; } if(ant==b[i]&&ans==a[y]){ if(flag){ printf("%d",ant); flag=0; } else{ printf(" %d",ant); } ant=0; } } } } printf("\n"); } int main() { while(~scanf("%d",&n)) { for(int i=1; i<=n; i++) { scanf("%d",&a[i]); } for(int i=1; i<=n; i++) { scanf("%d",&b[i]); } solve(); } return 0; }