关于昨晚的D
  • 板块学术版
  • 楼主9u46
  • 当前回复10
  • 已保存回复10
  • 发布时间2020/5/10 08:42
  • 上次更新2023/11/7 02:45:28
查看原帖
关于昨晚的D
95736
9u46楼主2020/5/10 08:42
  1. 本人只AC了A和B,会掉多少分?

  1. 本人的D的代码如下所示,求助为啥过不了(WA样例)。
#include<bits/stdc++.h>
#define ns "-1"
#define fs(i,x,y,z) for(ll i=x;i<=y;i+=z)
#define ft(i,x,y,z) for(ll i=x;i>=y;i+=z)
#define ll long long
#define ull unsigned long long
#define db double
#define ms(a,b) memset(a,b,sizeof(a))
#define sz(a) sizeof(a)
using namespace std;
const int rw[]={-1,0,1,0,-1,1,-1,1},cl[]={0,1,0,-1,-1,1,1,-1};
const int N=100001,inf=0x3f3f3f3f;
const int daynum[]={114514,31,28,31,30,31,30,31,31,30,31,30,31};
const db E=2.718281828459,pi=acos(-1.0),eps=0.0000000001;
inline int read(){
	int date=0,w=1;char c=0;
	while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}
	while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}
	return date*w;
}
ull ksm(ull a,ull b){
    ull ans=1,base=a;
    while(b){
        if(b&1){
            ans*=base;
	    }
	    base*=base;
	    b>>=1;
	}
    return ans;
}
ll gcd(ll a,ll b){
    if(b) return gcd(b,a%b);
    return a;
}
bool prm(int k){
	if(k<2) return 0;
	if(k==2||k==3) return 1;
	if(k%6!=1&&k%6!=5) return 0;
	for(int i=5;i<=sqrt(k);i+=6)
		if(k%i==0||k%(i+2)==0) return 0;
	return 1;
}
int n,a[N];
int main(){
	int t=read();
	while(t--){
		n=read();
		fs(i,1,n,1) a[i]=read();
		int start=1,end=n,x=0,y=0,prex=0,prey=0,ans=0,prestart=1,preend=n;
		printf("---\n");
		while(end-start>1){
			int deltay=y-prey;
			//x至少要次这么多
			prex=x;
			while(x-prex<=deltay&&start<=n&&start<end-1){
				x+=a[start];
				start++;
			}
			//printf("%d %d %d %d\n",start,end,x,y);
			if(start!=prestart) ans++,prestart=start;
			//x吃完了,轮到y了 
			int deltax=x-prex;
			prey=y;
			while(y-prey<=deltax&&end>=1&&start<end-1){
				y+=a[end];
				end--;
			}
			//printf("%d %d %d %d\n",start,end,x,y);
			if(end!=preend) ans++,preend=end;
		}
		printf("%d %d %d\n",ans,x,y);
	}
	return 0;
}

2020/5/10 08:42
加载中...