Submission #384003

#TimeUsernameProblemLanguageResultExecution timeMemory
384003aryan12JJOOII 2 (JOI20_ho_t2)C++17
100 / 100
18 ms3312 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

vector<int> J, O, I;

int Check(int start_idx, int k) {
	int start = start_idx;
	int l = 0, r = J.size();
	int mid, pos = J.size();
	while(l <= r) {
		mid = (l + r) / 2;
		if(J[mid] >= start_idx) {
			pos = mid;
			r = mid - 1;
		}
		else {
			l = mid + 1;
		}
	}
	if(pos + k - 1 >= J.size())
		return -1;
	l = 0;
	r = O.size();
	start_idx = J[pos + k - 1];
	pos = O.size();
	while(l <= r) {
		mid = (l + r) / 2;
		if(O[mid] >= start_idx) {
			pos = mid;
			r = mid - 1;
		}
		else {
			l = mid + 1;
		}
	}
	if(pos + k - 1 >= O.size())
		return -1;
	l = 0;
	r = I.size();
	start_idx = O[pos + k - 1];
	pos = I.size();
	while(l <= r) {
		mid = (l + r) / 2;
		if(I[mid] >= start_idx) {
			pos = mid;
			r = mid - 1;
		}
		else {
			l = mid + 1;
		}
	}
	if(pos + k - 1 >= I.size()) 
		return -1;
	int ending = I[pos + k - 1];
	return ending - start + 1 - 3 * k;
}

void Solve() {
	int n, k;
	cin >> n >> k;
	string s;
	cin >> s;
	for(int i = 0; i < s.size(); i++) {
		if(s[i] == 'J') {
			J.push_back(i);
		}
		else if(s[i] == 'O') {
			O.push_back(i);
		}
		else {
			I.push_back(i);
		}
	}
	int ans = INT_MAX;
	for(int i = 0; i < s.size(); i++) {
		if(s[i] == 'J') {
			int x = Check(i, k);
			if(x == -1) {
				break;
			}
			else {
				ans = min(ans, x);
			}
		}
	}
	cout << ((ans == INT_MAX) ? (-1LL) : (ans)) << "\n";
}

int32_t main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	Solve();
	return 0;
}

Compilation message (stderr)

ho_t2.cpp: In function 'long long int Check(long long int, long long int)':
ho_t2.cpp:21:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |  if(pos + k - 1 >= J.size())
      |     ~~~~~~~~~~~~^~~~~~~~~~~
ho_t2.cpp:37:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |  if(pos + k - 1 >= O.size())
      |     ~~~~~~~~~~~~^~~~~~~~~~~
ho_t2.cpp:53:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |  if(pos + k - 1 >= I.size())
      |     ~~~~~~~~~~~~^~~~~~~~~~~
ho_t2.cpp: In function 'void Solve()':
ho_t2.cpp:64:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |  for(int i = 0; i < s.size(); i++) {
      |                 ~~^~~~~~~~~~
ho_t2.cpp:76:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |  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...