Submission #753938

#TimeUsernameProblemLanguageResultExecution timeMemory
753938vjudge1JJOOII 2 (JOI20_ho_t2)C++17
100 / 100
7 ms2760 KiB
#include <bits/stdc++.h> 
#define Kuanyshh ios_base::sync_with_stdio(0) , cin.tie(0) , cout.tie(0) ; 
//#define s second 
//#define f first 
 
#pragma GCC optimize( "Ofast", "O3" , "unroll-loops") 
#pragma GCC target ("sse,sse2") 
 
using namespace std; 
using ll = long long; 
 
const int inf = 1e18+77; 
const int mod = 1e9+7; 
const int mx = 1e5+79; 
 
int cntj[mx], cnto[mx], cnti[mx]; 
 
void shift(){ 
 int n, k; 
 string s; 
 cin >> n >> k >> s; 
 int res = inf, index, kj = 0, ko = 0, ki = 0, ko2=0, ki2=0; 
 vector<int> o, ii, j; 
 for(int i = 0; i < s.size(); i++){ 
  if(s[i] == 'J'){ 
   j.push_back(i); 
   cntj[j.size()] = i; 
  } 
  if(s[i] == 'O'){ 
   o.push_back(i); 
   cnto[o.size()] = i; 
  } 
  if(s[i] == 'I'){ 
   ii.push_back(i); 
   cnti[ii.size()] = i; 
  } 
 } 
 kj = j.size(); 
 ko = o.size(); 
 ki = ii.size(); 
    for(int i = 1; i <= kj; i++){ 
        if(i + k - 1 > kj){ 
         break; 
  }else{ 
   index = cntj[i + k - 1]; 
  } 
        while(cnto[ko2] <= index){ 
         ko2++; 
         if(ko2 > ko) break; 
  } 
        if(ko2 + k - 1 > ko){ 
         break; 
  }else{ 
   index = cnto[ko2 + k - 1]; 
  } 
        while(cnti[ki2] < index){ 
         ki2++; 
         if(ki2 > ki){ 
          break; 
   } 
  } 
        if(ki2 + k - 1 > ki){ 
         break; 
  }else{ 
   index = cnti[ki2 + k - 1]; 
  } 
  int ans = index - cntj[i] + 1 - 3 * k; 
        res = min(res, ans); 
    } 
    if(res == inf || res < 0) cout << -1; 
 else cout << res;  
} 
 
signed main(){ 
    Kuanyshh; 
    int tt = 1; 
// //   cin >> tt; 
    while(tt--){ 
        shift(); 
    } 
}

Compilation message (stderr)

ho_t2.cpp:12:21: warning: overflow in conversion from 'double' to 'int' changes value from '1.0000000000000001e+18' to '2147483647' [-Woverflow]
   12 | const int inf = 1e18+77;
      |                 ~~~~^~~
ho_t2.cpp: In function 'void shift()':
ho_t2.cpp:24:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |  for(int i = 0; i < s.size(); i++){
      |                 ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...