Codeforces Round #8 (Div. 2) A - C
A.Not a Substring
題意:定義正規(guī)括號對為“()”、“()()”、“(())”此類的可以匹配的括號對,如”)(“是不正則的,現(xiàn)在輸入給你一個指定括號序列,詢問你是否能構(gòu)造出一個兩倍長度的括號序列,做到構(gòu)造括號序列不包含所給括號序列。

分析:將‘(’視作1,‘)’視作0,發(fā)現(xiàn)如果括號序列不嚴格單調(diào)遞減,即類似于“(((())”=111100,那就可以構(gòu)造為“()()()()()()”,若不為不嚴格單調(diào)序列,即類似于“())(”=1001,那就構(gòu)造為“(((())))”
代碼:


B.Fancy Coins
題意:有一件價值m的商品,Monocarp想買它,Monocarp有兩種硬幣,一種面值為1(有a1個),一種面值為k(有ak個);Monocarp只會用剛好m元的價格購買這個商品。題目告訴我們m,k,a1,ak;問我們還額外需要幾個硬幣才能購買這個商品

分析:我們的想法肯定是如果能面值為k的硬幣的話就用它(即總錢數(shù)沒超過m且硬幣數(shù)量夠),換言之我們要盡量多的使用面值為k的硬幣,然后再用面值為1的硬幣補上缺口,從這里我們分類討論,下面用if else來寫hhh
if(已有的面值為k的硬幣數(shù)量大于等于最大需要的數(shù)量)//這里指的是我們最大需要多少個,即需要m/k個
{ ? ? ? ? ??
????????????if(已有的面值為1硬幣數(shù)量大于等于最小需要的數(shù)量)//最小需要多少個,即為m%k,也就是m-m/k
? ? ? ? ? ? { ? ? ? ? ? ? ? ?輸出0,因為都已經(jīng)滿足 ? ? ? ? ? ? ?}
? ? ? ? ? else ? ? //已有的面值為1硬幣數(shù)量小于最小需要的數(shù)量
? ? ? ? ? {
? ? ? ? ? ? ?輸出面值為1的硬幣缺少的數(shù)量
? ? ? ? ? }
}
else ? ? ?//已有的面值為k的硬幣數(shù)量小最大需要的數(shù)量 ? 就是說我們的k面值的硬幣不夠
{ ? ? ? ? ? ?
????????????if(已有的面值為1硬幣數(shù)量大于等于最小需要的數(shù)量)面值為1的硬幣有多,可以盡量去替換缺少的面值為k的硬幣
? ? ? ? ? ? { ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? 輸出(面值為k的硬幣缺少的個數(shù) - (面值為1的硬幣多出來的個數(shù)/k))
? ? ? ? ? ?}
? ? ? ? ? else ? ? //面值為1的硬幣也不夠
? ? ? ? ? {
? ? ? ? ? ? ?輸出(面值為1的硬幣缺少的數(shù)量 + 面值為1的硬幣缺少的數(shù)量)
? ? ? ? ? }
}
代碼:


C.
題意:愛麗絲和鮑勃輪流走同一個棋子,棋盤是一個條形的(輸入的一個數(shù)組),上面的數(shù)字對應(yīng)了這個位置的值。其中愛麗絲走第一步并且第一步只能放置棋子而不能移動棋子,每次移動只能將棋子移動到當前位置的左邊且數(shù)值比當前位置數(shù)值小的地方,比如213,3可以移動到2或者1,1不可以移動到2因為2比1大。如果誰先不能移動,誰就贏了。如果對于一個位置,愛麗絲先將棋子放在這里,她一定可以獲勝,則我們稱這個位置為必勝位置,請輸出必勝位置的個數(shù)。
分析:用常用的思維考慮,對于必勝的情況,我們嘗試著去思考必敗的情況再找反之的條件,我們首先研究,怎么樣會讓對方贏,那么當左邊沒有可選數(shù)字時,或者對方下一步走到必勝狀態(tài)時,他就贏了,那么反之思考我們獲勝的條件就是左邊有可選數(shù)字并且對方下一步無法走到必勝狀態(tài),我們就必勝了。那么我們只需要記錄左邊可選數(shù)字的最小值,和左邊必勝狀態(tài)的最小值就可以了,(因為如果連最小的都走不了,那肯定沒法走了),通過一個for循環(huán)找到必勝位置的個數(shù)
代碼:


CSDN:陪你一起cf
bilibili:acmer--沈幼楚
知乎:與你cf