Submission #1015373

#TimeUsernameProblemLanguageResultExecution timeMemory
1015373snpmrnhlolJJOOII 2 (JOI20_ho_t2)C++17
100 / 100
14 ms4944 KiB
#include<bits/stdc++.h> using namespace std; const int N = 2e5; const int inf = 2e9; char v[N]; vector <int> occ[3]; int nxt[N + 1][3]; int tr[N]; int main(){ int n,k; int ans = inf; cin>>n>>k; for(int i = 0;i < n;i++){ cin>>v[i]; if(v[i] == 'J')v[i] = 0; else if(v[i] == 'O')v[i] = 1; else v[i] = 2; occ[v[i]].push_back(i); tr[i] = occ[v[i]].size() - 1; } nxt[n][0] = nxt[n][1] = nxt[n][2] = n; for(int i = n - 1;i >= 0;i--){ for(int j = 0;j < 3;j++){ nxt[i][j] = nxt[i + 1][j]; } nxt[i][v[i]] = i; //cout<<nxt[i][0]<<' '<<nxt[i][1]<<' '<<nxt[i][2]<<'\n'; } for(int i = 0;i < n;i++){ int pos = nxt[i][0]; if(pos == n || occ[0].size() < tr[pos] + k)continue; int pos1 = occ[0][tr[pos] + k - 1]; int id1 = nxt[pos1][1]; if(id1 == n || occ[1].size() < tr[id1] + k)continue; int pos2 = occ[1][tr[id1] + k - 1]; int id2 = nxt[pos2][2]; if(id2 == n || occ[2].size() < tr[id2] + k)continue; int pos3 = occ[2][tr[id2] + k - 1]; ///i -> pos3 ans = min(ans,n - 3*k - (n - 1 - pos3) - (i - 0)); } if(ans == inf)ans = -1; cout<<ans<<'\n'; return 0; }

Compilation message (stderr)

ho_t2.cpp: In function 'int main()':
ho_t2.cpp:18:16: warning: array subscript has type 'char' [-Wchar-subscripts]
   18 |         occ[v[i]].push_back(i);
      |             ~~~^
ho_t2.cpp:19:24: warning: array subscript has type 'char' [-Wchar-subscripts]
   19 |         tr[i] = occ[v[i]].size() - 1;
      |                     ~~~^
ho_t2.cpp:26:19: warning: array subscript has type 'char' [-Wchar-subscripts]
   26 |         nxt[i][v[i]] = i;
      |                ~~~^
ho_t2.cpp:31:38: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   31 |         if(pos == n || occ[0].size() < tr[pos] + k)continue;
      |                        ~~~~~~~~~~~~~~^~~~~~~~~~~~~
ho_t2.cpp:34:38: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   34 |         if(id1 == n || occ[1].size() < tr[id1] + k)continue;
      |                        ~~~~~~~~~~~~~~^~~~~~~~~~~~~
ho_t2.cpp:37:38: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   37 |         if(id2 == n || occ[2].size() < tr[id2] + k)continue;
      |                        ~~~~~~~~~~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...