Submission #393599

#TimeUsernameProblemLanguageResultExecution timeMemory
39359979brueJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
198 ms47648 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int n, k; char s[200005]; int ans = INT_MAX; int sparse[200005][20][3]; void makeSparse(){ int recent[3] = {n+1, n+1, n+1}; sparse[n+1][0][0] = sparse[n+1][0][1] = sparse[n+1][0][2] = n+1; for(int i=n; i>=0; i--){ for(int j=0; j<3; j++) sparse[i][0][j] = recent[j]; if(s[i] == 'J') recent[0] = i; else if(s[i] == 'O') recent[1] = i; else recent[2] = i; } for(int d=1; d<20; d++){ for(int i=0; i<=n+1; i++){ for(int j=0; j<3; j++){ sparse[i][d][j] = sparse[sparse[i][d-1][j]][d-1][j]; } } } } int kth(int x, int len, int y){ for(int d=0; d<20; d++){ if((len>>d) & 1) x = sparse[x][d][y]; } return x; } int main(){ scanf("%d %d %s", &n, &k, s+1); makeSparse(); for(int i=1; i<=n; i++){ int tmp = i-1; tmp = kth(tmp, k, 0); tmp = kth(tmp, k, 1); tmp = kth(tmp, k, 2); if(tmp != n+1) ans = min(ans, (n-3*k) - (n-tmp) - (i-1)); } printf("%d\n", ans == INT_MAX ? -1 : ans); }

Compilation message (stderr)

ho_t2.cpp: In function 'int main()':
ho_t2.cpp:40:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   40 |     scanf("%d %d %s", &n, &k, s+1);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...