Submission #337000

#TimeUsernameProblemLanguageResultExecution timeMemory
337000zggfJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
6 ms3308 KiB
#include <bits/stdc++.h> using namespace std; string s; vector<int> nxt1, nxt2, nxt3; int sum = 0, wyn = 0; int p1 = 0, p2 = 0, p3 = 0; int k1 = 0, k2 = 0, k3 = 0; bool pos = true; void push3(){ p3 = nxt3[p3]; k3 = nxt3[k3]; if(p3==-1){ pos = false; } } void push2(){ p2 = nxt2[p2]; k2 = nxt2[k2]; if(p2==-1){ pos = false; } } void push1(){ p1 = nxt1[p1]; k1 = nxt1[k1]; if(p1==-1){ pos = false; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); int n, k; cin>>n>>k; nxt1.resize(n, -1); nxt2.resize(n, -1); nxt3.resize(n, -1); cin>>s; for(int i = n-1; i > 0; i--){ nxt1[i-1] = nxt1[i]; nxt2[i-1] = nxt2[i]; nxt3[i-1] = nxt3[i]; switch(s[i]){ case 'J': nxt1[i-1] = i; break; case 'O': nxt2[i-1] = i; break; case 'I': nxt3[i-1] = i; break; } } p1 = nxt1[0]; p2 = nxt2[0]; p3 = nxt3[0]; k1 = nxt1[0]; k2 = nxt2[0]; k3 = nxt3[0]; switch(s[0]){ case 'J': p1 = 0; k1= 0; break; case 'O': p2 = 0; k2= 0; break; case 'I': p3 = 0; k3= 0; break; } for(int i = 0; i < k-1; i++){ p1 = nxt1[p1]; p2 = nxt2[p2]; p3 = nxt3[p3]; if(p1==-1) {cout<<-1; return 0;} if(p2==-1) {cout<<-1; return 0;} if(p3==-1) {cout<<-1; return 0;} } while(p1>k2){ push2(); if(!pos) {cout<<-1; return 0;} } while(p2>k3){ push3(); if(!pos) {cout<<-1; return 0;} } int wyn = p3-k1; while(pos){ push1(); while(p1>k2){ push2(); if(!pos) {break;} } while(p2>k3){ push3(); if(!pos) {break;} } if(pos) wyn = min(wyn, p3-k1); } cout<<wyn+1-3*k; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...