HDU 4710题解
来源:互联网 发布:烈火软件 编辑:程序博客网 时间:2024/04/29 11:59
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4710
题目思路:
找到最小公倍数后,以最小公倍数为最小单位来计算时,可能会出现这种状况:最下公倍数很大,然后就和没有优化以前没有什么区别啦,
每段最小公倍数内的也可以优化一下:
cal函数中,temp用来记录每次需要往前挪的位数,用now来记录计算到的地方,x用来记录循环到了0--a-1中的位置,y用来记录循环到了0--b-1
的位置,由于x位置处的值就为x,y位置的值就为y;因而,此时x,y位置的值的差就为下标x,y的差值了。
AC代码如下:
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>using namespace std;long long gcd(long long a,long long b){ if(b==0) return a; return gcd(b,a%b);}long long lcm(long long a,long long b){ return a/gcd(a,b)*b;}long long cal(long long n,long long a,long long b){ long long now=0,temp=0,x=0,y=0,ans=0; while(now<n){ temp=min(a-x,b-y); if(now+temp>=n) temp=n-now; ans+=temp*(abs(x-y)); x=(x+temp)%a; y=(y+temp)%b; now+=temp; }return ans;}int main(){ long long T,N,A,B; cin>>T; while(T--){ cin>>N>>A>>B; long long l=lcm(A,B); if(l>=N) cout<<cal(N,A,B)<<endl; else cout<<cal(l,A,B)*(N/l)+cal(N%l,A,B)<<endl; }return 0;}
- HDU 4710题解
- hdu 4602题解
- hdu 1789题解
- HDU 4665 题解
- HDU 4715题解
- hdu 1087题解
- hdu 2844题解
- hdu 2845 题解
- hdu 4007题解
- hdu 4004题解
- hdu 1879题解报告
- HDU 2180 时钟 题解
- HDU 1425 sort 题解
- HDU 1015 Safecracker 题解
- HDU Computer Transformation1041 题解
- HDU 题解 1024
- hdu 4451Dressing题解
- hdu 5120 题解 Intersection
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
- iOS 委托代理(delegate)入门
- 关于ActionContext.getContext()的用法
- 大话设计模式十三:生成器模式(builder)
- Qt之透明提示框
- HDU 4710题解
- 转义字符
- hdu 3661 Assignments 排序(水题)
- JQuery Ajax实例总结
- 2013年阿里巴巴实习生招聘笔试题目及解答
- linux文件系统分类和特点
- <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="rss/" />怎么解释啊
- LA 3942 Remember the Word(前缀树&树上DP)
- 一个Android的逆向工程