Bessie the cow is a huge fan of card games, which is quite surprising, given her lack of opposable thumbs. Unfortunately, none of the other cows in the herd are good opponents. They are so bad, in fact, that they always play in a completely predictable fashion! Nonetheless, it can still be a challenge for Bessie to figure out how to win.
Bessie and her friend Elsie are currently playing a simple card game where they take a deck of 2N cards, conveniently numbered 1…2N, and divide them into N cards for Bessie and N cards for Elsie. The two then play N rounds, where in each round Bessie and Elsie both play a single card, and the player with the highest card earns a point.
Given that Bessie can predict the order in which Elsie will play her cards, please determine the maximum number of points Bessie can win.
奶牛Bessie和Elsie在玩一種卡牌游戲。一共有2N張卡牌,點數分別為1到2N,每頭牛都會分到N張卡牌。
游戲一共分為N輪,因為Bessie太聰明了,她甚至可以預測出每回合Elsie會出什麼牌。
每輪游戲裡,兩頭牛分別出一張牌,點數大者獲勝。
Bessie現在想知道,自己最多能獲勝多少輪?
The first line of input contains the value of N (1≤N≤50,000).
The next N lines contain the cards that Elsie will play in each of the successive rounds of the game. Note that it is easy to determine Bessie's cards from this information.
Output a single line giving the maximum number of points Bessie can score.
Here, Bessie must have cards 2, 3, and 5 in her hand, and she can use these to win at most 2 points by saving the 5 until the end to beat Elsie's 4.
Problem credits: Austin Bannister and Brian Dean
#include#include #include #include #include #include #define F(i,j,n) for(int i=j;i<=n;i++) #define D(i,j,n) for(int i=j;i>=n;i--) #define ll long long #define pa pair #define maxn 100005 #define inf 1000000000 using namespace std; int n,x,cnta,cntb,j=0,ans=0; int a[maxn],b[maxn]; bool f[maxn]; inline int read() { int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int main() { n=read(); F(i,1,n){x=read();f[x]=true;} F(i,1,2*n) { if (f[i]) a[++cnta]=i; else b[++cntb]=i; } F(i,1,n) { j++; while (j<=n&&b[j]n) break; ans++; } printf("%d\n",ans); }