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;
}
#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;
}
相关文章推荐
- 2013 Multi-University Training Contest 1
- 2013 Multi-University Training Contest 1
- 2013 Multi-University Training Contest 1
- 【 2013 Multi-University Training Contest 6 】
- 2013 Multi-University Training Contest 7
- 2013 Multi-University Training Contest 8 小结
- 2013 Multi-University Training Contest 8 解题报告(更新中)
- 2013 Multi-University Training Contest 1 Occupy Cities HDU 4606
- 2013 Multi-University Training Contest 1 Warm up HDU 4612
- 2013 Multi-University Training Contest 4 Who's Aunt Zhang
- 2013 Multi-University Training Contest 8
- hdu 4619 匈牙利算法 求最大匹配 2013 Multi-University Training Contest 2
- 2013 Multi-University Training Contest 1 I-number 大数
- 2013 Multi-University Training Contest 5
- [置顶] 2013 Multi-University Training Contest 8
- 2013 Multi-University Training Contest 10 解题报告(更新中)
- Integer Partition(hdu4658)2013 Multi-University Training Contest 6 整数拆分二
- 2013 Multi-University Training Contest 1 Partition
- 2013 Multi-University Training Contest 1 Vases and Flowers HDU 4614
- 2013 Multi-University Training Contest 9