简单题这里被我弄复杂了,因为确实不想改我原先被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;
}
本文分享了一个复杂的调试经历,最初因误解题目要求导致代码复杂化。通过细致分析,最终解决了问题。涉及数组操作、条件判断等内容。
782

被折叠的 条评论
为什么被折叠?



