关于语言类型
查看原帖
关于语言类型
537046
大眼仔Happy楼主2024/3/7 22:16

rt,下面这个代码在 C++14 (GCC 9) 只获得了 10pts,在 C++98/11/14 均能 AC,在 C++17/20 CE,这是为啥。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+5;
const ll inf=1e18;
ll inline read()
{
	ll num=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){num=(num<<3)+(num<<1)+(ch^48);ch=getchar();}
	return num*f;
}
int T;ll k,n,ans;
struct data
{
	ll x,y;
	data friend operator +(const data A,const data B){return (data){A.x+B.x,A.y+B.y};}
	data friend operator -(const data A,const data B){return (data){A.x-B.x,A.y-B.y};}
}s,p[N],eP;
#define Eset (node){inf,0}
#define Uset (node){0,inf}
struct node
{
	ll l,r;
	node friend operator &(const node A,const node B)
	{
		if(A.l>A.r||B.l>B.r)return Eset;
		return (node){max(A.l,B.l),min(A.r,B.r)};
	}
};
node Ge(ll K,ll B)
{
	if(K<0)return (B<=0)?(node){0,B/K}:Eset;
	if(K>0)return (B<=0)?Uset:(node){B/K+(B%K!=0),inf};
	return (B<=0)?Uset:Eset;
}
node Le(ll K,ll B)
{
	if(K<0)return (B>=0)?Uset:(node){(B/K)+(B%K!=0),inf};
	if(K>0)return (B>=0)?(node){0,B/K}:Eset;
	return (B>=0)?Uset:Eset;
}
ll calc(int id)
{
	ll t=inf/n+1;node res;
	res=Le(s.x,eP.x)&Le(s.y,eP.y)&Ge(n*k+s.x+s.y,eP.x+eP.y-id*k);	if(res.l<=res.r)t=min(t,res.l);
	res=Le(s.x,eP.x)&Ge(s.y,eP.y)&Ge(n*k+s.x-s.y,eP.x-eP.y-id*k);	if(res.l<=res.r)t=min(t,res.l);
	res=Ge(s.x,eP.x)&Le(s.y,eP.y)&Ge(n*k-s.x+s.y,-eP.x+eP.y-id*k);	if(res.l<=res.r)t=min(t,res.l);
	res=Ge(s.x,eP.x)&Ge(s.y,eP.y)&Ge(n*k-s.x-s.y,-eP.x-eP.y-id*k);	if(res.l<=res.r)t=min(t,res.l);
	return t*n+id;
}
void solve()
{
	n=read();k=read();eP=(data){read(),read()};
	s=(data){0,0};ans=inf;
	for(int i=0;i<n;i++)s=s+(p[i]=(data){read(),read()});
	if(!eP.x&&!eP.y)return printf("0\n"),void();
	for(int i=0;i<n;i++)ans=min(ans,calc(i)),eP=eP-p[i];
	if(ans!=inf)printf("%lld\n",ans);
	else printf("-1\n");
}
int main(){
//	freopen("P10217_1.in","r",stdin);
//	freopen("test.out","w",stdout);
	T=read();while(T--)solve();
	return 0;
}
2024/3/7 22:16
加载中...