CF1172A Nauuo and Cards 贪心
Posted guangheli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1172A Nauuo and Cards 贪心相关的知识,希望对你有一定的参考价值。
我们发现,如果我们打数字牌后,就不能打 0 了.
分两种情况讨论即可.
code:
#include <bits/stdc++.h> #define N 200008 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; int n; int a[N],b[N]; set<int>se; set<int>::iterator it; int check() { int i,j,flag=0,cur,tp=1; if(!b[n]) return 0; for(i=n-1;i>=0;--i) if(!b[i]||(b[i]!=b[i+1]-1)) { if(b[i+1]!=1) flag=1; break; } if(flag) return 0; if(b[n]==n) { printf("0 "); return 1; } cur=b[n]+1; for(i=1;i<=n;++i) if(a[i]) se.insert(a[i]); while(cur<=n) { if(se.empty()) return 0; it=se.begin(); if(*it==cur) { se.erase(it); ++cur; if(b[tp])se.insert(b[tp]); ++tp; } else return 0; } printf("%d ",n-b[n]); return 1; } int main() { // setIO("input"); int i,j; scanf("%d",&n); for(i=1;i<=n;++i) scanf("%d",&a[i]); for(i=1;i<=n;++i) scanf("%d",&b[i]); if(!check()) { int MAX=0; for(i=1;i<=n;++i) if(b[i]) MAX=max(MAX,i-b[i]+1); printf("%d ",MAX+n); } return 0; }
以上是关于CF1172A Nauuo and Cards 贪心的主要内容,如果未能解决你的问题,请参考以下文章