Bzoj4396 [Usaco2015 Dec] High Card Wins
4396: [usaco dec] High Card Wins Description
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 and Elsie are playing a card game. There are a total of 2N cards with 1 to 2N points, each of which is allocated to N cards.
The game is divided into N rounds, because Bessie is so smart that she can even predict the number of Elsie cards each round.
In each round of the game, the two cows have a card, and the number of points wins.
Bessie wants to know how many rounds he can win?
Input
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
Output a single line giving the maximum number of points Bessie can score.
Sample Input3
1
6
4 Sample Output2HINT
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
Source greedy. Sort two people by arrays a and B. Each time we take a minimum value from array a, we take a minimum value greater than this value from array B until all the numbers in array B are smaller than those in array. (You can understand it)
#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 1000000000using 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);}