CF D求调求hack
  • 板块学术版
  • 楼主Take_A_Single_6
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/9/23 22:53
  • 上次更新2023/10/27 10:13:00
查看原帖
CF D求调求hack
305895
Take_A_Single_6楼主2022/9/23 22:53
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,n,k,a[200005],l[200005],r[200005],ind,inm,ml,mr;
bool ok,ol,orr;
int max(int a,int b)
{
	if(a>b)return a;
	return b;
}
signed main()
{
	for(cin>>T;T;T--)
	{
		memset(l,0,sizeof l);
		memset(r,0,sizeof r);
    cin>>n>>k,ind=inm=0,ol=orr=1,ml=mr=-214748364;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        if(i<k)l[++ind]=a[i];
        if(i>k)r[++inm]=a[i];
    }
    for(int i=ind;i>=1;i--){
	l[i]+=l[i+1],ml=max(ml,l[i]);
	//if(a[k]+l[i]<0)ol=0;
	}
    for(int i=1;i<=inm;i++){
	r[i]+=r[i-1],mr=max(mr,r[i]);
	//if(a[k]+r[i]<0)orr=0;
	}
	for(int i=1;i<=ind;i++)
		if(a[k]+max(0,mr)+l[i]<0)ol=0;
	for(int i=1;i<=inm;i++)
		if(a[k]+max(0,ml)+r[i]<0)orr=0; 
    ok=0;
    for(int i=0;i<=ind;i++)
    {
    	if(a[k]+l[i]+r[inm]>=0&&orr)
    	{
    		puts("YES");
    		ok=1;
    		break;
		}
	}
	for(int i=0;i<=inm;i++)
    {
    	if(a[k]+r[i]+l[1]>=0&&!ok&&ol)
    	{
    		puts("YES");
    		ok=1;
    		break;
		}
	}
	if(!ok)puts("NO");
	}
    return 0;
}
2022/9/23 22:53
加载中...