結果

問題 No.973 余興
ユーザー kotatsugamekotatsugame
提出日時 2020-01-17 23:18:29
言語 C++14
(gcc 13.2.0 + boost 1.83.0)
結果
AC  
実行時間 3,559 ms / 4,000 ms
コード長 2,056 bytes
コンパイル時間 975 ms
コンパイル使用メモリ 83,684 KB
実行使用メモリ 24,724 KB
最終ジャッジ日時 2023-09-08 07:22:12
合計ジャッジ時間 93,562 ms
ジャッジサーバーID
(参考情報)
judge12 / judge14
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1,901 ms
24,472 KB
testcase_01 AC 1,871 ms
24,424 KB
testcase_02 AC 1,869 ms
24,408 KB
testcase_03 AC 1,857 ms
24,428 KB
testcase_04 AC 1,829 ms
24,432 KB
testcase_05 AC 1,905 ms
24,672 KB
testcase_06 AC 1,876 ms
24,376 KB
testcase_07 AC 1,858 ms
24,464 KB
testcase_08 AC 1,826 ms
24,420 KB
testcase_09 AC 1,855 ms
24,368 KB
testcase_10 AC 1,812 ms
23,896 KB
testcase_11 AC 922 ms
9,856 KB
testcase_12 AC 898 ms
9,908 KB
testcase_13 AC 903 ms
9,852 KB
testcase_14 AC 901 ms
9,900 KB
testcase_15 AC 45 ms
4,376 KB
testcase_16 AC 47 ms
4,380 KB
testcase_17 AC 29 ms
4,380 KB
testcase_18 AC 37 ms
4,376 KB
testcase_19 AC 37 ms
4,380 KB
testcase_20 AC 28 ms
4,384 KB
testcase_21 AC 45 ms
4,456 KB
testcase_22 AC 45 ms
4,380 KB
testcase_23 AC 37 ms
4,376 KB
testcase_24 AC 37 ms
4,376 KB
testcase_25 AC 18 ms
4,380 KB
testcase_26 AC 28 ms
4,384 KB
testcase_27 AC 55 ms
4,752 KB
testcase_28 AC 37 ms
4,376 KB
testcase_29 AC 35 ms
4,376 KB
testcase_30 AC 3,353 ms
24,408 KB
testcase_31 AC 3,449 ms
24,420 KB
testcase_32 AC 3,559 ms
24,372 KB
testcase_33 AC 3,355 ms
24,724 KB
testcase_34 AC 3,282 ms
24,472 KB
testcase_35 AC 3,284 ms
24,412 KB
testcase_36 AC 3,215 ms
24,196 KB
testcase_37 AC 3,297 ms
24,204 KB
testcase_38 AC 3,477 ms
24,552 KB
testcase_39 AC 3,131 ms
24,372 KB
testcase_40 AC 2 ms
4,376 KB
testcase_41 AC 2 ms
4,380 KB
testcase_42 AC 2 ms
4,376 KB
testcase_43 AC 2 ms
4,376 KB
testcase_44 AC 1 ms
4,380 KB
testcase_45 AC 2 ms
4,380 KB
testcase_46 AC 3,227 ms
24,712 KB
testcase_47 AC 3,158 ms
24,364 KB
testcase_48 AC 3,197 ms
24,492 KB
testcase_49 AC 2,886 ms
23,580 KB
testcase_50 AC 3,041 ms
24,708 KB
testcase_51 AC 3,056 ms
24,488 KB
testcase_52 AC 3,046 ms
24,536 KB
testcase_53 AC 2,915 ms
24,404 KB
testcase_54 AC 2,959 ms
24,372 KB
testcase_55 AC 3,153 ms
24,468 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp:53:1: 警告: ISO C++ では型の無い ‘main’ の宣言を禁止しています [-Wreturn-type]
   53 | main()
      | ^~~~

ソースコード

diff #

#include<iostream>
using namespace std;
#include<vector>
#include<functional>
#include<limits>
template<typename T>
struct segtree{
	using F=function<T(T,T)>;
	const F calcfn,updatefn;
	int n;
	T defvalue;
	vector<T>dat;
	segtree(int n_=0,T defvalue_=numeric_limits<T>::max(),
		const F calcfn_=[](T a,T b){return a<b?a:b;},
		const F updatefn_=[](T a,T b){return b;}
	):defvalue(defvalue_),calcfn(calcfn_),updatefn(updatefn_)
	{
		n=1;
		while(n<n_)n<<=1;
		dat.assign(2*n-1,defvalue);
	}
	void copy(const vector<T>&v)
	{
		for(int i=0;i<v.size();i++)dat[i+n-1]=v[i];
		for(int i=n-2;i>=0;i--)dat[i]=calcfn(dat[i*2+1],dat[i*2+2]);
	}
	void update(int i,T a)
	{
		i+=n-1;
		dat[i]=updatefn(dat[i],a);
		while(i>0)
		{
			i=(i-1)/2;
			dat[i]=calcfn(dat[2*i+1],dat[2*i+2]);
		}
	}
	T query(int a,int b)//[a,b)
	{
		int L=(a<0?0:a>n?n:a)+n-1;
		int R=(b<0?0:b>n?n:b)+n-1;
		T lret=defvalue,rret=defvalue;
		for(;L<R;L>>=1,R>>=1)
		{
			if(!(L&1))lret=calcfn(lret,dat[L]);
			if(!(R&1))rret=calcfn(dat[--R],rret);
		}
		return calcfn(lret,rret);
	}
};
int N;
long A[5000],X,S[5001];
int getL[5001],getR[5001];
main()
{
	cin>>N>>X;
	for(int i=0;i<N;i++)
	{
		cin>>A[i];
		S[i+1]=S[i]+A[i];
	}
	for(int i=0;i<N;i++)
	{
		int L=i+1,R=N+1;
		while(R-L>1)
		{
			int M=(L+R)/2;
			if(S[M]-S[i]<=X)L=M;
			else R=M;
		}
		getL[i]=L;
	}
	for(int i=1;i<=N;i++)
	{
		int L=-1,R=i-1;
		while(R-L>1)
		{
			int M=(L+R)/2;
			if(S[i]-S[M]<=X)R=M;
			else L=M;
		}
		getR[i]=R;
	}
	auto f=[](bool a,bool b){return a&&b;};
	auto g=[](bool a,bool b){return b;};
	vector<segtree<bool> >dpL(N+1,segtree<bool>(N+1,true,f,g));
	vector<segtree<bool> >dpR(N+1,segtree<bool>(N+1,true,f,g));
	for(int i=0;i<N;i++)
	{
		dpL[i].update(i+1,false);
		dpR[i+1].update(i,false);
	}
	for(int k=2;k<=N;k++)
	{
		for(int i=0;i+k<=N;i++)
		{
			int l=i,r=i+k;
			bool now=false;
			if(!dpR[r].query(l+1,getL[l]+1))now=true;
			if(!dpL[l].query(getR[r],r))now=true;
			if(!now)
			{
				dpL[l].update(r,now);
				dpR[r].update(l,now);
			}
		}
	}
	cout<<(dpL[0].query(N,N+1)?"A":"B")<<endl;
}
0