統計ccsu
題解:dp[1][i]代表到第i個原串字元 『c』 的字串數量。
dp[2][i]代表到第i個原串字元 'cc』的字串數量。
dp[3][i]代表到第i個原串字元 'ccs』的字串數量。
dp[4][i]代表到第i個原串字元 'ccsu』的字串數量。
#include
#define ll long long
using
namespace std;
const
int maxn =
1e5+10;
ll dp1[5]
[maxn]
,dp2[5]
[maxn]
;ll sum1[maxn]
, sum2[maxn]
;char s[maxn]
;int
main()
else
if(s[i]
=='s'
) dp1[3]
[i]+
= dp1[2]
[i-1];
else dp1[4]
[i]+
= dp1[3]
[i-1];
for(
int j=
1;j<=
4;j++
) dp1[j]
[i]+
= dp1[j]
[i-1];
}for
(int i=n;i;i--
)else
if(s[i]
=='s'
) dp2[3]
[i]+
= dp2[4]
[i+1];
else dp2[4]
[i]+=1
;for
(int j=
1;j<=
4;j++
) dp2[j]
[i]+
= dp2[j]
[i+1];
} ll ans =
1e16
;for
(int i=
1;i) ans =
min(ans,
abs(dp1[4]
[i]-dp2[1]
[i+1])
);printf
("%lld\n"
,ans)
;}
hpu』s birthday
題解:dp[1][i]代表到第i個原串字元 『1』的字串數量。
dp[2][i]代表到第i個原串字元 『11』的字串數量。
dp[3][i]代表到第i個原串字元 『110』的字串數量。
注意這題仔細分析一下複雜度和需要空間。
#include
#define ll long long
using
namespace std;
const
int maxn =
2e6+
10,mod =
1e9+7;
char d[16]
=;char b[50]
,s[maxn*2]
;int c;
ll dp[4]
[maxn]
;void
turn
(int n,
int k)
intmain()
for(
int i=
1;i<=cx;i++
)else dp[3]
[i]=
( dp[3]
[i]+ dp[2]
[i-1])
% mod;
for(
int j=
1;j<=
3;j++
) dp[j]
[i]=
(dp[j]
[i]+dp[j]
[i-1])
% mod;
}printf
("%lld\n"
,dp[3]
[cx]);
for(
int i=
1;i<=
3;i++
)for
(int j=
0;j<=cx;j++
) dp[i]
[j]=0;
}}
nico和niconiconi
題解 :
dp[i] 代表到第i個原串字元所能得到的最大分數。
看**轉移。
#include
#define ll long long
using
namespace std;
const
int maxn =
3e5+10;
ll dp[maxn]
;int
main()
cout<<}
c. divisibility by eight
題解:是個很經典的題目,給定一串字元,要求刪除其中一些字元,使得剩餘的數能被某個數整除。就這道題來說,可以暴力,因為8能被1000整除,所以只要列舉所有的三位數就行。但是還有一種更優化的方法——dp。
設dp[i][j]長度為i的字串刪除一些字元後,值為jmode8值存在。
轉移就是如果dp[i-1][j] = = 1 那麼意味著這個值是存在的,那麼dp[i][j]這個值一定存在,同樣如果我不刪除第i個字元,那麼
dp[i][(j*10+s[i])%8] 也能夠存在。再用a[i][j]儲存一下字元。
#include
#define d(x) (s[x] - '0')
using
namespace std;
char s[
110]
;int dp[
110][10
];string a[
110][10
];intmain()
dp[i]
[(j*10+
d(i))%
8]|= dp[i-1]
[j];
dp[i]
[j]|
= dp[i-1]
[j];
}for
(int i=
0;i(dp[i][0
]&&a[i][0
].size()
) cout<<
"no"
<}
幾道字串類習題
1題 wertyu 競賽基礎題 把手放在鍵盤上時,稍不注意就會往右錯一位,這樣的話q會變為w,j會變為k等。輸入乙個錯位後敲出的字串,輸出打字員本來想打出的句子。樣例輸入 o s,gomr ypfsu 樣例輸出 i am fine today.解析 本題注意兩點 1 for迴圈終止條件的判斷,常量字...
字串題目
1.數串 1.題目描述 設有n個正整數,將他們連線成一排,組成乙個最大的多位整數。如 n 3時,3個整數13,312,343,連成的最大整數為34331213。如 n 4時,4個整數7,13,4,246連線成的最大整數為7424613。輸入描述 有多組測試樣例,每組測試樣例包含兩行,第一行為乙個整數...
字串相關題目
判斷兩個字串str1和str2,是否互為旋轉詞 字串str左邊任意長度的子串挪到右邊 1234 的旋轉詞有1234 2341 3412 4123 時間複雜度為o n 做法 1 判斷兩字串長度是否相等 2 長度相等,生成str1 str1的大字串 大字串包含了str1的所有旋轉詞 3 在大字串中尋找是...