題意:
給乙個數字 k (k<1e6)和乙個長度不超過(1e6) 的字串 s ,這個字串只是由0和1組成,問這個字串能分成幾個滿足各字元的和等於
k 的子串?
輸入:
1 1010
2 01010
100 01010
輸出: 6
4 0
分析:直接暴力,分類討論,情況一:1的數量小於k,輸出0。情況二:k=0,這時只需要統計0的個數即可,由此找到規律,能組成 的
子串的數目=((0的個數+1)*0的個數 ) / 2。情況三:也是最重要最難的,找到滿足這樣規則的最短的子串,然後記錄該子串的
兩個端點的位置,從開頭到該字串的末端可以構成的子串數量=左端點 * 右端點,最後全部遍歷一遍字串就可以了。
**:
#include using namespace std;
const int maxn=1000000+10;
char s[maxn];
int main()
pre=i;}}
if(cur==k)
printf("%lld\n",sum2);
return 0;
}
小結:這個用暴力解決的題目,學的就是一種思路,清晰的思路。
Codeforces 587C 樹上倍增
題意 求樹上兩點路徑中的前 a 10 小的點權值。思路 類似lca倍增演算法來儲存 i 2 j 路上的 前 10 小個 的點權值。然後要寫乙個權值合併 具體求 u v 的話,就是先分別計算 和 減1是lca會重疊 然後再合併,輸出答案。include include include include ...
Codeforces 976C 題解報告
對資料進行排序 1 按左邊的數從小到大排 2 若左邊的數相等,則按右邊的數從大到小排。排序之後,若乙個數的右邊的數小於等於上乙個數的右邊的數,則這兩個數必然符合題意。比如2 13 2 12 1 11排序之後,變為 1 11 2 13 2 12因為12 13,則有 2,12 被包含在它的上乙個數 2,...
CodeForces 948C 解題報告
題目鏈結 這道題看出來了是一道stl題,本來一開始用佇列去做,結果tle,在這裡先給出tle include using namespace std typedef long long ll const int maxn 1e5 10 int n,v maxn t maxn int main els...