Submission #503844

#TimeUsernameProblemLanguageResultExecution timeMemory
503844cig32JJOOII 2 (JOI20_ho_t2)C++17
100 / 100
31 ms5520 KiB
#pragma GCC optimize("Ofast") #include <bits/stdc++.h> using namespace std; mt19937_64 rng((int)std::chrono::steady_clock::now().time_since_epoch().count()); const int MAXN = 3e5 + 10; const int MOD = 1e9 + 7; #define int long long int rnd(int x, int y) { // random number generator int u= uniform_int_distribution<int>(x, y)(rng); return u; } void solve(int tc) { int n, k; cin >> n >> k; string s; cin >> s; int freq[n+1][3]; for(int i=0; i<3; i++) freq[0][i] = 0; for(int i=0; i<n; i++) s[i] = (s[i] == 'J' ? '0' : (s[i] == 'O' ? '1' : '2')); for(int i=1; i<=n; i++) { for(int j=0; j<3; j++) { freq[i][j] = freq[i-1][j] + (s[i-1] == j + '0'); } } int ans = 1e18; for(int i=1; i<=n; i++) { bool valid = 1; int lb = i, rb = n; while(lb<rb) { int mid = (lb+rb) >> 1; if(freq[mid][0] - freq[i-1][0] >= k) rb = mid; else lb = mid+1; } valid &= (freq[lb][0] - freq[i-1][0] == k); rb = n; int sto = lb; lb++; while(lb<rb) { int mid = (lb+rb) >> 1; if(freq[mid][1] - freq[sto][1] >= k) rb = mid; else lb = mid+1; } valid &= (freq[lb][1] - freq[sto][1] == k); rb = n; sto = lb; lb++; while(lb<rb) { int mid = (lb+rb) >> 1; if(freq[mid][2] - freq[sto][2] >= k) rb = mid; else lb = mid+1; } valid &= (freq[lb][2] - freq[sto][2] == k); if(valid) ans = min(ans, lb-i + 1 - 3*k); } cout << (ans == 1e18? -1 : ans); } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); int t = 1; //cin >> t; for(int i=1; i<=t; i++) solve(i); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...