每日打卡 22 11 16 CF 1694B Paranoid String
蒟蒻一個(gè),從今天起每天一道CF1000-1400的思維題.........希望可以堅(jiān)持下去.
題目大意如下:
給定一個(gè)m長的01字符串然后你可以對(duì)他進(jìn)行至多m-1次如下操作:
1:將一個(gè)”01“字串變?yōu)椤?“
2:將一個(gè)”10“字串變?yōu)椤?“
后將其變?yōu)殚L度為1的字符串;
現(xiàn)在有長度n的01字符串請(qǐng)問多少個(gè)字串滿足上述條件
t組數(shù)據(jù)。
t<=100,n<=2e5;
所有的n<=2e5;
仔細(xì)分析下題,可以將兩次操作理解為刪除兩個(gè)相鄰的不同的字符中左邊的那個(gè)字符(關(guān)鍵點(diǎn));
如果這里能夠get到的話這個(gè)題就不難了(好吧我承認(rèn)我找了題解= =)
那么這樣的話對(duì)于這整個(gè)序列中的一個(gè)字符s[i]來講:
1 如果s[i]==s[i-1]那么所有以s[i]為結(jié)尾的子串都不可能滿足條件,因?yàn)樗麄z相同 這樣的話就 無法刪除
s[i-1],則長度永遠(yuǎn)不會(huì)是1
2 如果s[i]!=s[i-1]那么所有以s[i]為結(jié)尾的字串都滿足條件。
OK,我們來論證一下:首先如果s[i-2]與s[i-1]是相同的話那么我們可以刪除s[i-1]于是再次形成s[i]!=s[i-1]的情況。
2如果s[i-1]!=s[i-2];那么就可以刪除s[i-2]那么還是s[i-1]!=s[i]的情況;
綜上無論如何都會(huì)滿足s[i]!=s[i-1]的情況。故只要相鄰的滿足不同,那么所有以為s[i]的子串滿足條件
代碼如下
/*?
每日CF打卡 E.M.T!
*/
#include<stdio.h>
#include<string.h>
char s[200005];
int main(){
?? ?long long t,len,ans;
?? ?scanf("%lld",&t);
?? ?while(t--){
?? ? scanf("%lld",&len);
?? ? ans=0;
?? ? scanf("%s",s);
?? ? int i;
?? ? for(i=1;i<len;i++){
?? ? ?if(s[i]==s[i-1]) ans++;
?? ? ?else ans+=(i+1);
?? ? }?? ?
?? ?printf("%lld\n",ans+1);?? ?
?? ?}?? ?
? ?return 0;?
}
wwwww我好菜啊。。。
希望明天可以不看題解做出來。。
?
總結(jié)
以上是生活随笔為你收集整理的每日打卡 22 11 16 CF 1694B Paranoid String的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Postman访问k8s RESTf
- 下一篇: ERROR in xxx.js from