您的位置:首页 > 大数据 > 人工智能

2013 Multi-University Training Contest 2

2013-07-25 22:18 267 查看
从比赛开始到结束一直在搞1001,,为什么版刷题我们过不了。。。一直debug,,终于AC了。。。我写的都无力了。。。

#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<iomanip>
#include<cstdio>
using namespace std;
__int64 gcd(__int64 a,__int64 b)
{
if(b==0)
{
return a;
}
else
{
return gcd(b,a%b);
}
}
__int64 g(int n,int a,int b)
{
__int64 ans=0;
int i=0,x1=0,y1=0,tp=0;
while(i<n)
{
if((x1+a)>=n&&(y1+b)>=n)
{
ans+=(__int64)(n-i)*tp;
i=n;
continue;
}
if((x1+a)<(y1+b))
{
ans+=(__int64)tp*(x1+a-i);
i=x1+a;
tp=i-y1;
x1+=a;
}
else if((x1+a)==(y1+b))
{
ans+=(__int64)tp*(x1+a-i);
i=x1+a;
x1+=a;
y1+=b;
tp=0;
}
else
{
ans+=(__int64)tp*(y1+b-i);
i=y1+b;
y1+=b;
tp=i-x1;
}
}
return ans;
}
int main()
{
int t,n,x,y,a,b;
__int64 sum,tmp,ans;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&x,&y);
if(x==y)
{
printf("0\n");
continue;
}
a=max(x,y);
b=min(x,y);
sum=(__int64)a/gcd(a,b)*(__int64)b;
if(sum>= n)
{
printf("%I64d\n",g(n,a,b));
continue;
}
tmp=g(sum,a,b);
ans=tmp*(n/sum)+g(n%sum,a,b);
printf("%I64d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HDU 多校