題目大意:乙個字串有a,b組成,告訴你 a , b , ab ,ba 的數量s(a) , s(b) , s(ab) , s(ba),求字典序最小的字串 , 無解輸出-1。。
思路:首先若ab和ba的差大於1,則無解。其次,若s(a) <= s(ab) , s(ba) 且 s(b) <= s(ab) , s(ba) ,則無解。當s(ab) , s(ba)都為0但s(a)和s(b)都不為0則無解。
接下來就是構造了。
分為以下三塊:
1、s(ab) > s(ba)
這個簡單,將所有的出去s(a)-s(ab)的a放到最前面,然後就是ab,最後將剩餘的b放到最後面
2、s(ab) < s(ba)
這個有個小坑,若s(ab)為0,則將所有的b放到最前面,然後放ba,再放a
若s(ab)不為0,則將剩餘的a放到第乙個ba後面,然後放ba(留乙個放最後),最後放b,然後ba即可
3、s(ab)
這個考慮的最多, 直接看**吧。
#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
//#pragma comment(linker, "/stack:102400000,102400000")
#define maxn 200005
#define mod 1000000007
#define mem(a , b) memset(a , b , sizeof(a))
#define ll long long
#define ull unsigned long long
typedef pairpii;
const long long inf=0x3fffffff;
int main()
if(na == nb && nb == nab && nab == nba)
if(nab > nba)
else if(nab == nba)
else if(na > nab)
else if(nb > nab)
}else
else}}
return 0;
}
遞推 構造字串
problem description umr 閒來無聊玩起了自己的名字,現在的她想知道對於給定的長度 n,只用自己的 u m r 這 3 個字元最多能構成多少種不同的字串。但是因為 umr 並不喜歡 mm 所以 mm 是不能連在一起的。input 輸入資料有多組 資料組數不超過 100000 到 ...
擴充套件 String類 構造字串
程式清單16.1使用了string的7個建構函式 用ctor標識,這是傳統c 中建構函式的縮寫 表16.1簡要的描述了這些建構函式。使用建構函式時都進行了簡化,即隱藏了這樣乙個事實 string實際上是模板具體化basic string的乙個typedef,同時省略了與記憶體管理相關的引數。size...
c語言 用鍊錶構造字串
今天乙個同學問我怎麼用鍊錶構造字串 然後我簡單的說了下思路 不過他還是沒寫出來 因為資料結構在講字串的時候,老師主要講了順序構造字串 鏈式構造字串缺點太多 自己也沒有看 然後自己今天寫了一下 支援動態擴充套件 主檔案 include include liststring.h int main cha...