time limit: 1 sec
memory limit: 128 mb
submit: 260
solved: 75
submit
status
web board
985有乙個長度為n的0-1串,已知他最多可以修改k次(每次修改乙個字元即0->1 或者 1->0),他想知道連續的全1子串最長是多少。
第一行輸入乙個整數t,代表有t組測試資料。
每組資料第一行輸入兩個整數n,k分別代筆上面的資訊。
注:1 <= t <= 12,1 <= n <= 100000,0 <= k <= 100000。
乙個整數代表可以得到的最大長度。
26 3010100
6 2010100
54
宇神:宇神:解法一:發現最後的結果是線性的,我們二分答案,把問題變成判定性問題。
對於當前的二分值mid,判斷它的合法性即:是否存在乙個mid的連續段使得該段的0字元總數 <= k。
時間複雜度:o(t * n * log(n))。
解法二:考慮dp,dp[i]表示以第i個字元開始的最優連續段。
那麼我們只要找到最大的j(i <= j <= n)使得[i, j]裡面0字元總數 <= k即可。
可以先統計0字元的字首和,然後每次二分即可。最後結果就是max(dp[i]) (1 <= i <= n)。
時間複雜度:o(t * n * log(n))。
菜雞:記錄0~i之間有多少0儲存才cnt[i]中
則區間[n,m]中有a[m]-a[n-1]個0
長度(含有字元數)為n-m+1
所以比較k與a[m]-a[n-1]從而進行區間更新
並記錄出現過的最大長度即為結果
[cpp]view plain
copy
?#include
#include
using
namespace
std;
char
s[100200];
intcnt[100200];
intmain()
if(cnt[n-1]<=k)
printf("%d\n"
,n);
else
printf("%d\n"
,res);
}
}
return
0;
}
解法一:發現最後的結果是線性的,我們二分答案,把問題變成判定性問題。
對於當前的二分值mid,判斷它的合法性即:是否存在乙個mid的連續段使得該段的0字元總數 <= k。
時間複雜度:o(t * n * log(n))。
解法二:考慮dp,dp[i]表示以第i個字元開始的最優連續段。
那麼我們只要找到最大的j(i <= j <= n)使得[i, j]裡面0字元總數 <= k即可。
可以先統計0字元的字首和,然後每次二分即可。最後結果就是max(dp[i]) (1 <= i <= n)。
時間複雜度:o(t * n * log(n))。
菜雞:記錄0~i之間有多少0儲存才cnt[i]中
則區間[n,m]中有a[m]-a[n-1]個0
長度(含有字元數)為n-m+1
所以比較k與a[m]-a[n-1]從而進行區間更新
並記錄出現過的最大長度即為結果
[cpp]view plain
copy
?#include
#include
using
namespace
std;
char
s[100200];
intcnt[100200];
intmain()
if(cnt[n-1]<=k)
printf("%d\n"
,n);
else
printf("%d\n"
,res);
}
}
return
0;
}
985的0 1串難題
985的0 1串難題 time limit 1 sec memory limit 128 mb submit 122 solved 23 submit status web board985有乙個長度為n的0 1串,已知他最多可以修改k次 每次修改乙個字元即0 1 或者 1 0 他想知道連續的全1子...
Problem D 順序串的基本運算
time limit 1 sec memory limit 128 mb submit 73 solved 28 submit status web board 編寫乙個程式,實現順序串的各種基本運算,主函式已給出,請補充每一種方法。1 建立串s abcdefghefghijklmn 和串s1 xy...
Problem D 字串的逆序
problem d 字串的逆序 time limit 1 sec memory limit 2 mb submit 8658 solved 5155 submit status web board description 將輸入的乙個字串s逆序輸出。input 輸入為乙個串s。輸入最少為乙個字元,最...