(紀中)2200. 【GDKOI訓練】紙牌遊戲(card)【貪心】

(File IO): input:card.in output:card.out
時間限制: 1000 ms 空間限制: 262144 KB 具體限制
Goto ProblemSet


題目描述
BessieBessie 是一頭非常喜歡紙牌的奶牛,雖然她沒有大拇指,但她對紙牌有近乎癡迷的喜愛。不幸的是,牛羣中的其他牛都不是好的對手。他們的水平真的很差。他們總是以一種完全可預測的方式來玩紙牌!儘管如此,BessieBessie 仍然可以選擇如何獲勝。
BessieBessie 和她的朋友Elsie 在玩一個簡單的紙牌遊戲,她們拿了一付有2n2n 張卡片的牌,牌上的數字編號爲12n1- 2n ,並將其均分成兩份,一份卡片給BessieBessie 和一份卡片給ElsieElsie
然後兩人開始玩牌,一共進行nn 輪, 在每一輪中,BessieBessieElsieElsie 都打一張卡,誰的牌大就得一分。
神奇的BessieBessie 可以預測ElsieElsie 打牌順序,並且儘可能的想贏取勝利。請確定BessieBessie可以贏得的最大點數。


輸入
第一行一個整數N(1N50,000)N (1≤N≤50,000).
接下來的NN 行是ElsieElsie 將每輪連續的比賽中出的牌。請注意,從這些信息很容易確定BessieBessie 的卡片。

輸出
一行給出BessieBessie 可以得分的最大點數。


樣例輸入
3
1
6
4

樣例輸出
2


數據範圍限制


提示
​貝西手上的牌是2,352,3,5,她按照2352,3,5 的順序出牌可以獲得2 分。


解題思路
貪心。
準備兩個有序隊列,用田忌賽馬原理。


代碼

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,m,a[100010],b[50010],c[50010],x,ans,k,k1,j;
int main(){
 freopen("card.in","r",stdin);
  freopen("card.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x);
        a[x]=1;
    }
    k=0,k1=0;
    for(int i=1;i<=n*2;i++)
        if(!a[i])
            b[++k]=i;
        else
            c[++k1]=i;
    j=1,ans=0;
    for(int i=1;i<=n;i++)
    {
        if(c[j]<b[i])
        {
            j++;
            ans++;
            if(j>n)
            {
                printf("%d",ans);
                return 0;
            }
        }
    }
    printf("%d",ans);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章