没账号求帮交
查看原帖
没账号求帮交
1121412
Cute_Fish楼主2024/11/10 10:42

RT。有没有路过的好心人帮忙交上去。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
int tot=0;
inline void exgcd(int a,int b,int &x,int &y){
	if(!b)return x=1,y=0,void();
	exgcd(b,a%b,y,x),y-=a/b*x;return;
}
signed main(){
    int T;cin>>T;
	while(T--){
		int res=0,a,b,c,p;cin>>a>>b>>c>>p;
		int d=__gcd(a,b);
		for(int i=0;i*c<=p;i++){
			int tmp=p-c*i,x=0,y=0;
			if(tmp%d)continue;
			int A=a/d,B=b/d,C=tmp/d;
			exgcd(A,B,x,y);
			x*=C,y*=C;
			int xmn=x%B;
			if(xmn<0)xmn+=B;
			int ymn=y%A;
			if(ymn<0)ymn+=A;
			int ymx=(C-A*xmn)/B;
			if(ymx<0)continue;
			res+=(ymx-ymn)/A+1;
		}
		printf("Case %lld: %lld\n",++tot,res);
	}	
}
2024/11/10 10:42
加载中...