卡片遊戲(貪心)

2021-09-10 14:39:53 字數 1580 閱讀 8573

小明最近宅在家裡無聊,於是他發明了一種有趣的遊戲,遊戲道具是n張疊在一起的卡片,每張卡片上都有乙個數字,數字的範圍是0~9,遊戲規則如下:

首先取最上方的卡片放到桌子上,然後每次取最上方的卡片,放到桌子上已有卡片序列的最右邊或者最左邊。當n張卡片全部都放到桌子上後,桌子上的n張卡片構成了乙個數。這個數不能有前導0,也就是說最左邊的卡片上的數字不能是0。遊戲的目標是使這個數最小。

現在你的任務是幫小明寫段程式,求出這個最小數。

第一行是乙個數t,表示有t組測試資料;

然後下面有t行, 每行是乙個只含有0~9的字串,表示n張疊在一起的卡片,最左邊的數字表示最上方的卡片。

[technical specification]

t<=1000

1 <= n <= 100

對於每組測試資料,請在一行內輸出能得到的最小數。

3565

9876543210

9876105432

5561234567890

怎麼放牌的大家都是知道的,和第乙個相比嘛,小於等於的放前,大於的放後。

因為卡片是從上往下依次拿出來排序的,最後肯定是把非零最小值放第一位嘛,所以我們就找最靠近底部的非零最小值,因為假設有多個相同的非零最小值,那麼最靠近底部的那個就是最後放到最前面的,也就是說我們現在能夠保證我們找的這個非零最小值的下面都是比它大的,那這一部分就不用再排了,直接按照原來順序放在末尾。

這樣的話,我們就可以把整摞牌分為三部分,min_之前的(這個就按照遊戲規則該怎麼排怎麼排),min_(這個就是第一位的牌),min_之後的(直接按照原來順序放在末尾)。

其實我們可能會想,不,是我做的時候想了,我們是不知道牌的最小值是幾。但是這種做法就是明顯知道了最小值是幾,並且具體在哪個位置,於是我們才可以放心的排min_前邊的0。也就是說這個遊戲呢,我們是可以看見牌的資訊的,在排之前。

哦對噶,這裡還用了string,就是字串連線起來比較方便

然後還有就是**用的方法是先把最小值和最小值的資訊都記錄下來,然後就只看剩下的前後兩部分,就是相當於我們先把最小值的挑出來放最前面然後再看其他的。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

const

int max =

0x3f3f3f3f

;using namespace std;

typedef

long

long ll;

intmain()

}for

(int i=

0;ilength()

;i++)if

(i>string2[0]

)//如果將拿的牌大於首位,那就放後面

if(i>mini)

//後面的都是大於我們找的min_了,所以就直接原來怎麼排的就怎麼排

} cout<}return0;

}

905 卡片遊戲

時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 小明最近宅在家裡無聊,於是他發明了一種有趣的遊戲,遊戲道具是n張疊在一起的卡片,每張卡片上都有乙個數字,數字的範圍是0 9,遊戲規則如下 首先取最上方的卡片放到桌子上,然後每次取最上方的卡片,放到桌子上已有卡片序列的最右邊或者最...

hdu 卡片遊戲

problem description 小明最近宅在家裡無聊,於是他發明了一種有趣的遊戲,遊戲道具是n張疊在一起的卡片,每張卡片上都有乙個數字,數字的範圍是0 9,遊戲規則如下 首先取最上方的卡片放到桌子上,然後每次取最上方的卡片,放到桌子上已有卡片序列的最右邊或者最左邊。當n張卡片全部都放到桌子上...

codevs 卡片遊戲

題目描述 description 桌面上有一疊牌,從第一張牌 即位於頂面的牌 開始從上往下依次編號為1 n.當至少還剩兩張排時進行一下操作 把第一張牌扔掉,然後把新的第一張牌放到整疊牌的最後。輸入n。輸出每次扔掉的牌,以及最後剩下的牌。分析 說是費用流的題目,但是直接用陣列暴力模擬就過了。var t...