제출 #371281

#제출 시각아이디문제언어결과실행 시간메모리
371281sam571128JJOOII 2 (JOI20_ho_t2)C++14
0 / 100
1 ms492 KiB
#include <bits/stdc++.h>

#define int long long
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

using namespace std;

const int N = 2e5+5;
int cntj[N], cnto[N], cnti[N];

signed main(){
	fastio
	int n,k;
	cin >> n >> k;
	string s;
	cin >> s;
	s = '$' + s;
	for(int i = 1;i <= n;i++){
		cntj[i] = cntj[i-1], cnto[i] = cnto[i-1], cnti[i] = cnti[i-1];
		if(s[i]=='J'){
			cntj[i]++;
		}else if(s[i]=='O'){
			cnto[i]++;
		}else if(s[i]=='I'){
			cnti[i]++;
		}
	}
	auto check = [&](int i, int j){
		int idx = lower_bound(cntj+1,cntj+n,cntj[i-1]+k)-cntj;
		if(idx >= j) return false;
		idx = lower_bound(cnto+1,cnto+n,cnto[idx-1]+k)-cnto;
		if(idx >= j) return false;
		idx = lower_bound(cnti+1,cnti+n,cnti[idx-1]+k)-cnti;
		if(idx > j) return false;
		else return true;
	};
	int ans = 1e18;
	for(int i = 1;i <= n;i++){
		int l = i, r = n;
		while(l < r){
			int mid = l+r>>1;
			if(check(i,mid)) r = mid;
			else l = mid+1;
		}
		if(check(i,l)) ans = min(l-i+1-k*3,ans);
	}
	cout << (ans==1e18 ? -1 : ans) << "\n";
}

컴파일 시 표준 에러 (stderr) 메시지

ho_t2.cpp: In function 'int main()':
ho_t2.cpp:41:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   41 |    int mid = l+r>>1;
      |              ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...