結果

問題 No.973 余興
ユーザー kotatsugamekotatsugame
提出日時 2020-01-17 23:18:29
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
TLE  
(最新)
AC  
(最初)
実行時間 -
コード長 2,056 bytes
コンパイル時間 1,027 ms
コンパイル使用メモリ 83,760 KB
実行使用メモリ 24,832 KB
最終ジャッジ日時 2024-06-26 00:39:21
合計ジャッジ時間 46,655 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2,092 ms
24,576 KB
testcase_01 AC 2,054 ms
24,576 KB
testcase_02 AC 1,867 ms
24,576 KB
testcase_03 AC 1,899 ms
24,576 KB
testcase_04 AC 1,930 ms
24,704 KB
testcase_05 AC 1,911 ms
24,576 KB
testcase_06 AC 1,886 ms
24,576 KB
testcase_07 AC 1,939 ms
24,704 KB
testcase_08 AC 1,895 ms
24,576 KB
testcase_09 AC 1,867 ms
24,704 KB
testcase_10 AC 1,806 ms
24,192 KB
testcase_11 AC 945 ms
10,112 KB
testcase_12 AC 936 ms
10,240 KB
testcase_13 AC 954 ms
9,984 KB
testcase_14 AC 938 ms
9,984 KB
testcase_15 AC 46 ms
6,940 KB
testcase_16 AC 47 ms
6,940 KB
testcase_17 AC 29 ms
6,940 KB
testcase_18 AC 37 ms
6,940 KB
testcase_19 AC 38 ms
6,940 KB
testcase_20 AC 29 ms
6,940 KB
testcase_21 AC 45 ms
6,940 KB
testcase_22 AC 46 ms
6,944 KB
testcase_23 AC 38 ms
6,940 KB
testcase_24 AC 38 ms
6,944 KB
testcase_25 AC 18 ms
6,944 KB
testcase_26 AC 29 ms
6,944 KB
testcase_27 AC 57 ms
6,940 KB
testcase_28 AC 38 ms
6,940 KB
testcase_29 AC 37 ms
6,944 KB
testcase_30 AC 3,659 ms
24,576 KB
testcase_31 AC 3,825 ms
24,576 KB
testcase_32 AC 3,806 ms
24,704 KB
testcase_33 TLE -
testcase_34 TLE -
testcase_35 TLE -
testcase_36 TLE -
testcase_37 TLE -
testcase_38 TLE -
testcase_39 TLE -
testcase_40 AC 2 ms
6,944 KB
testcase_41 AC 3 ms
6,940 KB
testcase_42 AC 2 ms
6,944 KB
testcase_43 AC 3 ms
6,940 KB
testcase_44 AC 32 ms
6,940 KB
testcase_45 AC 3 ms
6,944 KB
testcase_46 TLE -
testcase_47 AC 3,926 ms
24,576 KB
testcase_48 TLE -
testcase_49 AC 3,596 ms
23,808 KB
testcase_50 AC 3,697 ms
24,832 KB
testcase_51 AC 3,670 ms
24,704 KB
testcase_52 AC 3,854 ms
24,704 KB
testcase_53 AC 3,681 ms
24,704 KB
testcase_54 AC 3,786 ms
24,704 KB
testcase_55 AC 3,907 ms
24,704 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp:53:1: warning: ISO C++ forbids declaration of 'main' with no type [-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