溪染的排列P

正解思路

考虑对比a和b
a和b要么有1个地方不同,要么有2个地方不同
分类讨论即可
复杂度o(n)

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int n;
int cnt;
int p[N];
int pos[N];
bool vis[N];
int a[N],b[N];
int s1[N],s2[N];
int main() {
    scanf("%d",&n);
    for(int i=1; i<=n; ++i)
        scanf("%d",&a[i]),s1[a[i]]++;
    for(int i=1; i<=n; ++i)
        scanf("%d",&b[i]),s2[b[i]]++;
    for(int i=1; i<=n; ++i)
        if(a[i]!=b[i]) pos[++cnt]=i;
    if(cnt==2) {
        for(int i=1; i<=n; ++i) p[i]=a[i];
        p[pos[1]]=b[pos[1]];
        cnt=0;
        for(int i=1; i<=n; ++i) {
            if(!vis[p[i]]) ++cnt;
            vis[p[i]]=1;
        }
        if(cnt==n)
            for(int i=1; i<=n; ++i) printf("%d ",p[i]);
        else {
            p[pos[1]]=a[pos[1]];
            p[pos[2]]=b[pos[2]];
            for(int i=1; i<=n; ++i) printf("%d ",p[i]);
        }
    }
    else {
        for(int i=1; i<=n; ++i) {
            if(i==pos[1]) {
                for(int j=1; j<=1000; ++j)
                    if(!s1[j]&&!s2[j]) {
                        printf("%d ",j);
                        break;
                    }
            } else printf("%d ",a[i]);
        }
    }
    return 0;
}

验题人代码

#include<bits/stdc++.h>
using namespace std;
int a[1005],b[1005];
int p[1005];
int n;
void check()
{
    int pa=0,pb=0;
    for(int i=1;i<=n;i++){
        if(p[i]!=a[i]) pa++;
        if(p[i]!=b[i]) pb++;
    }
    if(pa==1&&pb==1){
        for(int i=1;i<=n;i++)
            cout<<p[i]<<" ";
        exit(0);
    }
    return;
}
int vis[1005];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i++) scanf("%d",&b[i]);
    for(int i=1;i<=n;i++)
        if(a[i]==b[i]&&!vis[a[i]]){
            vis[a[i]]=1;
            p[i]=a[i];
        }
    int x=0,y=0;
    for(int i=1;i<=n;i++)
        if(!p[i]){
            if(!x) x=i;
            else y=i;
            for(int j=1;j<=n;j++)
                if(!vis[j]){
                    vis[j]=1;
                    p[i]=j;
                    break;
                }
        }
    check();
    swap(p[x],p[y]);
    check();
    return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1151248次浏览 17148人参与
# 通信和硬件还有转码的必要吗 #
11197次浏览 101人参与
# OPPO开奖 #
19196次浏览 267人参与
# 和牛牛一起刷题打卡 #
18911次浏览 1635人参与
# 实习与准备秋招该如何平衡 #
203353次浏览 3625人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4970次浏览 30人参与
# 不去互联网可以去金融科技 #
20338次浏览 255人参与
# 通信硬件薪资爆料 #
265883次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2220次浏览 34人参与
# 互联网公司评价 #
97676次浏览 1280人参与
# 简历无回复,你会继续海投还是优化再投? #
25034次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454824次浏览 5124人参与
# 国企和大厂硬件兄弟怎么选? #
53896次浏览 1012人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14638次浏览 349人参与
# 硬件人的简历怎么写 #
82285次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19394次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
28059次浏览 248人参与
# 学历对求职的影响 #
161225次浏览 1804人参与
# 你收到了团子的OC了吗 #
538678次浏览 6386人参与
# 你已经投递多少份简历了 #
344177次浏览 4963人参与
# 实习生应该准时下班吗 #
96965次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63518次浏览 622人参与
牛客网
牛客企业服务