最開始看到這題的時候,從題目裡給的樣例就認為是把原串拆成n個最長的非遞減序列,後來發現並不是這樣,因為題目所要求的是將其拆分為最少的部分,並且所有部分都是滿足在不同表示順序中具有最小的字典序,和我的想法有那麼些不同。
舉個栗子:對於01101111這個串,按題目要求拆開所得的串就只有01101111,而按我自己的理解,就會拆成011和01111;這是兩個的不同之處。
所以就只能按最大長度的最小表示法的方法做,上**:
/*舉個栗子:對於01101111這個串,按題目要求拆開所得的串
就只有01101111,而按我自己的理解,就會拆成011和01111;
這是兩個的不同之處。
所以就只能按最大長度的最小表示法的方法做,上**:*/
#include using namespace std;
const int maxn=2001;
int t;
string str;
bool judge(string s)
}if(min(i,j)==0)
return 1;
else
return 0;
}//檢測是否為最小表示
不難看出子串行長度越大,代價越小,那麼我們自然想到每次肯定是把長度大的先統計掉,這就有點像bfs時每次都處理同乙個深度的節點。
然後我們就可以腦洞大開模擬到bfs上去。以原始序列作為根節點,每個節點都指向其刪除任意乙個字元後所得到的子串行。按子串行長度擴充套件bfs,最後在搜尋到第k個節點時輸出答案就行了~
#includeusing namespace std;
typedef long long ll;
const ll maxn=500010;
const ll inf=2147483647;
ll n,k,ans;
string a,cur,icur;
queueq;
sets;
int main()
if(s.size()==k)}}
if(s.size()
return 0;
}
字串處理 字串反轉
請原諒博主今天很閒,於是乎博主又開始更新微博了。這次要更新的問題是 編寫乙個函式,反轉乙個單詞的順序。例如 do or do not,there is no try.就要反轉成 try.no is there not,do or do 大家要認真看看這道題,這道題和大家想象的貌似有點不同。首先字串反...
字串處理
uncode與ansi字串轉換 我們使用windows函式multibytetowidechar將多位元組字串轉換成寬字元字串。函式如下 int multibytetowidechar uintcodepage dworddwflags lpcstrlpmultibytestr intcbmulti...
字串處理
byte array new byte 2 array system.text.encoding.default.getbytes 啊 int i1 short array 0 0 int i2 short array 1 0 unicode解碼方式下的漢字碼 array system.text.e...