MnZn 求条省选 D1T1
查看原帖
MnZn 求条省选 D1T1
324666
diqiuyi奶龙楼主2024/3/7 16:36

rt,WA 70pts

/*
希望数据和样例一样水
*/ 
#include <bits/stdc++.h>
#define int __int128
using namespace std;
inline int read(){
	int x=0,f=1;char ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+(ch&15);
	return f*x;
}
int t,x,y,xx[100005],yy[100005],ans,sx[100005],sy[100005],k,n; 
int solve(){
	sx[0]=xx[0],sy[0]=yy[0];
	for(int i=1;i<n;i++)
		sx[i]=sx[i-1]+xx[i],sy[i]=sy[i-1]+yy[i];
	int res=-1;
	for(int i=0;i<n;i++){
		int fz=x+y-sy[i]-sx[i]-(i+1)*k,fm=n*k+sx[n-1]+sy[n-1],p;
		if(fm<=0){
			if(fz<=0){
				if(x-sx[i]<0||y-sy[i]<0) continue;
				if(~res) res=min(res,i+1);
				else res=i+1;
			}
		}
		else{
			if(fz<=0){
				if(x-sx[i]<0||y-sy[i]<0) continue;
				if(~res) res=min(res,i+1);
				else res=i+1;
			}
			else{
				p=(fz+fm-1)/fm;
				if(x-sx[i]-p*sx[n-1]<0||y-sy[i]-p*sy[n-1]<0) continue;
				if(~res) res=min(res,p*n+i+1);
				else res=p*n+i+1; 
			}
		}
	}
	return res;
}
void print(int x){
	if(x<0) x=-x,putchar('-');
	if(x>9) print(x/10);
	putchar(x%10|48);
}
signed main(){
	t=read();
	while(t--){
		n=read(),k=read(),x=read(),y=read(),ans=-1;
		for(int i=0;i<n;i++) xx[i]=read(),yy[i]=read();
//		for(int i=0;i<n;i++) yy[i]=read();
		if((!x)&&(!y)){
			puts("0");
			continue;
		} 
		int g=solve();
		if(~g)
			if(~ans) ans=min(ans,g);
			else ans=g;
//		printf("%lld\n",ans);
		y=-y;
		for(int i=0;i<n;i++) yy[i]=-yy[i];
		g=solve();
		if(~g)
			if(~ans) ans=min(ans,g);
			else ans=g;
//		printf("%lld\n",ans);
		x=-x;
		for(int i=0;i<n;i++) xx[i]=-xx[i];
		g=solve();
		if(~g)
			if(~ans) ans=min(ans,g);
			else ans=g;
//		printf("%lld\n",ans);
		y=-y;
		for(int i=0;i<n;i++) yy[i]=-yy[i];
		g=solve();
		if(~g)
			if(~ans) ans=min(ans,g);
			else ans=g;
		print(ans);
		putchar(10);
	}
	return 0;
}
2024/3/7 16:36
加载中...