Submission #201571

#TimeUsernameProblemLanguageResultExecution timeMemory
201571theStaticMindJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
23 ms5240 KiB
#include<bits/stdc++.h>
#define pb push_back
#define ii pair<int,int>
#define all(x) (x).begin(),(x).end()
#define INF 100000000000000000
#define modulo 1000000007
#define mod 998244353
#define int long long int
using namespace std;
int lower(vector<int>& arr, int x){
      int l = 0;
      int r = (int)arr.size() - 1;
      int ret = -1;
      while(l <= r){
            int mid = (l + r) / 2;
            if(arr[mid] >= x){
                  r = mid - 1;
                  ret = mid;
            }
            else l = mid + 1;
      }
      return ret;
}
int32_t main(){
      ios_base::sync_with_stdio(false);
      cin.tie(NULL);
//      freopen("q.gir","r",stdin);
//      freopen("q.cik","w",stdout);
      int n, k, ans = INF;
      cin >> n >> k;
      string s;
      cin >> s;
      vector<int> arr(1, -1);
      vector<int> data[3];
      for(int i = 0; i < n; i++){
            if(s[i] == 'J')arr.pb(0);
            if(s[i] == 'O')arr.pb(1);
            if(s[i] == 'I')arr.pb(2);
      }
      for(int i = 1; i <= n; i++){
            data[arr[i]].pb(i);
      }
      for(int i = 0; i + k - 1 < data[0].size(); i++){
            int sj = i;
            int ej = i + k - 1;
            int so = lower(data[1], data[0][ej]);
            if(so == -1 || so + k - 1 >= data[1].size())continue;
            int eo = so + k - 1;
            int si = lower(data[2], data[1][eo]);
            if(si == -1 || si + k - 1 >= data[2].size())continue;
            int ei = si + k - 1;
            ans = min(ans, data[2][ei] - data[0][i] + 1 - 3 * k);
      }
      if(ans == INF)cout << -1;
      else cout << ans;
}

Compilation message (stderr)

ho_t2.cpp: In function 'int32_t main()':
ho_t2.cpp:43:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int i = 0; i + k - 1 < data[0].size(); i++){
                      ~~~~~~~~~~^~~~~~~~~~~~~~~~
ho_t2.cpp:47:39: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(so == -1 || so + k - 1 >= data[1].size())continue;
                            ~~~~~~~~~~~^~~~~~~~~~~~~~~~~
ho_t2.cpp:50:39: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(si == -1 || si + k - 1 >= data[2].size())continue;
                            ~~~~~~~~~~~^~~~~~~~~~~~~~~~~
ho_t2.cpp:44:17: warning: unused variable 'sj' [-Wunused-variable]
             int sj = i;
                 ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...