Submission #1156070

#TimeUsernameProblemLanguageResultExecution timeMemory
1156070reitracnJJOOII 2 (JOI20_ho_t2)C++17
100 / 100
22 ms19268 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int INF = 1e18; signed main() { int N, K; scanf("%lld%lld\n", &N, &K); vector<int > v(N); vector<int > nxt(N, INF); vector<deque<int >> deq(3); vector<vector<int>> dp(N+1, vector<int>(4, INF)); for(int iC = 0; iC < N; iC++) { char carLu; scanf("%c", &carLu); if(carLu == 'J') v[iC] = 0; else if(carLu == 'O') v[iC] = 1; else if(carLu == 'I') v[iC] = 2; else while (true) ; } for(int pos = 0; pos < N; pos++) { int colorAct = v[pos]; deq[colorAct].push_back(pos); if(deq[colorAct].size() == K) { int posFront = deq[colorAct].front(); deq[colorAct].pop_front(); nxt[posFront] = pos; } } /*for(int pos = 0; pos < N; pos++) { printf("%lld ", nxt[pos]); }*/ dp[0][0] = 0; int ans = INF; for(int pos = 0; pos< N; pos++) { for(int state = 0; state < 3; state ++) { if(state == 0) dp[pos+1][state] = min(dp[pos+1][state], dp[pos][state]); else dp[pos+1][state] = min(dp[pos+1][state], dp[pos][state] + 1); if(nxt[pos] != INF && v[pos] == state) { dp[nxt[pos] +1][state+1] = min(dp[nxt[pos] +1][state+1], dp[pos][state] + (nxt[pos] - pos +1) - K); if(state == 2) { ans = min(ans, dp[nxt[pos] +1 ][state+1]); } } } } if(ans == INF) printf("-1"); else printf("%lld\n", ans); }

Compilation message (stderr)

ho_t2.cpp: In function 'int main()':
ho_t2.cpp:10:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 |     scanf("%lld%lld\n", &N, &K);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
ho_t2.cpp:18:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |         scanf("%c", &carLu);
      |         ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...