Pagini recente » Cod sursa (job #870830) | Cod sursa (job #1404531) | Cod sursa (job #656463) | Cod sursa (job #1315814) | Cod sursa (job #2685554)
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin("blis.in");
ofstream fout("blis.out");
void max_self(int &a, int b) {
a = max(a, b);
}
void min_self(int &a, int b) {
a = min(a, b);
}
int main() {
int K;
string s;
fin >> K >> s;
int N = s.size();
s = '0' + s;
vector<int> dp(N + 2, INF);
vector<vector<pair<int,int>>> upd(N + 1);
dp[0] = -INF;
int ans = 0;
for(int i = 1; i <= N; ++i) {
int val = 0, up = min(N, i + K - 1);
for(int j = i; j <= up; ++j) {
val = val * 2 + (s[j] - '0');
max_self(ans, val);
int st = 0, dr = i - 1, poz = 0;
while(st <= dr) {
int mid = (st + dr) >> 1;
if(dp[mid] < val) {
poz = mid;
st = mid + 1;
}
else
dr = mid - 1;
}
++poz;
if(dp[poz] > val)
upd[j].emplace_back(poz, val);
}
for(auto x : upd[i])
min_self(dp[x.first], x.second);
}
int sol = 0;
for(int i = N; i > 0 && !sol; --i)
if(dp[i] != INF)
sol = i;
fout << ans << '\n' << sol;
}