제출 #201698

#제출 시각아이디문제언어결과실행 시간메모리
201698nikolapesic2802JJOOII 2 (JOI20_ho_t2)C++14
100 / 100
70 ms5436 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/rope>

#define ll long long
#define pb push_back
#define sz(x) (int)(x).size()
#define mp make_pair
#define f first
#define s second
#define all(x) x.begin(), x.end()
#define D(x) cerr << #x << " is " << (x) << "\n";
#define ld long double

using namespace std;
using namespace __gnu_pbds;
using namespace __gnu_cxx;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>; ///find_by_order(),order_of_key()
template<class T1, class T2> ostream& operator<<(ostream& os, const pair<T1,T2>& a) { os << '{' << a.f << ", " << a.s << '}'; return os; }
template<class T> ostream& operator<<(ostream& os, const vector<T>& a){os << '{';for(int i=0;i<sz(a);i++){if(i>0&&i<sz(a))os << ", ";os << a[i];}os<<'}';return os;}
template<class T> ostream& operator<<(ostream& os, const deque<T>& a){os << '{';for(int i=0;i<sz(a);i++){if(i>0&&i<sz(a))os << ", ";os << a[i];}os<<'}';return os;}
template<class T> ostream& operator<<(ostream& os, const set<T>& a) {os << '{';int i=0;for(auto p:a){if(i>0&&i<sz(a))os << ", ";os << p;i++;}os << '}';return os;}
template<class T> ostream& operator<<(ostream& os, const set<T,greater<T> >& a) {os << '{';int i=0;for(auto p:a){if(i>0&&i<sz(a))os << ", ";os << p;i++;}os << '}';return os;}
template<class T> ostream& operator<<(ostream& os, const multiset<T>& a) {os << '{';int i=0;for(auto p:a){if(i>0&&i<sz(a))os << ", ";os << p;i++;}os << '}';return os;}
template<class T> ostream& operator<<(ostream& os, const multiset<T,greater<T> >& a) {os << '{';int i=0;for(auto p:a){if(i>0&&i<sz(a))os << ", ";os << p;i++;}os << '}';return os;}
template<class T1,class T2> ostream& operator<<(ostream& os, const map<T1,T2>& a) {os << '{';int i=0;for(auto p:a){if(i>0&&i<sz(a))os << ", ";os << p;i++;}os << '}';return os;}

const int N=2e5+5;
int sum[N][3],nxt[N][3];
int getSum(int l,int r,int i){
	int ans=sum[r][i];
	if(l)
		ans-=sum[l-1][i];
	return ans;
}
int main()
{
	//freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	int n,k;
	scanf("%i %i",&n,&k);
	string s;
	cin >> s;
	for(int i=0;i<n;i++){
		if(s[i]=='J')
			sum[i][0]++;
		if(s[i]=='O')
			sum[i][1]++;
		if(s[i]=='I')
			sum[i][2]++;
		if(i)
			for(int j=0;j<3;j++)
				sum[i][j]+=sum[i-1][j];
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<3;j++){
			int l=i,r=n-1;
			while(l<r){
				int m=(l+r)>>1;
				int s=getSum(i,m,j);
				if(s<k)
					l=m+1;
				else
					r=m;
			}
			int s=getSum(i,l,j);
			if(s!=k)
				nxt[i][j]=-1;
			else
				nxt[i][j]=l;
		}
	}
	int mn=INT_MAX;
	for(int i=0;i<n;i++){
		int tr=i;
		for(int j=0;j<3;j++)
			if(tr!=-1)
				tr=nxt[tr][j];
		if(tr==-1)
			continue;
		int ostalo=tr-i+1-3*k;
		mn=min(mn,ostalo);
	}
	if(mn==INT_MAX)
		mn=-1;
	printf("%i\n",mn);
	return 0;
}

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

ho_t2.cpp: In function 'int main()':
ho_t2.cpp:44:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%i %i",&n,&k);
  ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...