[Offer收割]编程练习赛56:卡片游戏

#include<bits/stdc++.h>
#include <assert.h>
using namespace std;

const int maxn = 1e5+11;
int a[maxn];
int b[maxn];
int cnt[maxn];
int main(){
    int n;
    cin>>n;
    memset(cnt,0,sizeof(cnt));
    for(int i=0;i<n;i++){
        cin>>a[i];
        cnt[a[i]]++;
    }
    int ans=0;
    for(int i=1;i<=maxn;i++){
        if(!cnt[i]){
            ans=i;
            break;
        }
    }
    int sans=0;
    for(int i=ans+1;i<=maxn;i++){
        if(!cnt[i]){
            sans=i;
            break;
        }
    }
    int tmp=ans;
 //   cout<<ans<<endl;
    for(int i=0;i<n;i++){
        cin>>b[i];
        if(b[i]==ans){
            if(cnt[a[i]]>1||a[i]>sans){
                tmp=max(tmp,sans);
            }
            else {
                tmp=max(tmp,a[i]); //如果bi的数字都比ans小说明前面翻一张牌并不影响最后的答案,所以取max
            }
        }
    }
    cout<<tmp<<endl;
    return 0;
}
题目链接

猜你喜欢

转载自blog.csdn.net/qq_34016712/article/details/80040247