hdu 4710 Balls Rearrangement (数学思维)
意甲冠军:那是, 从数0-n小球进入相应的i%a箱号。然后买一个新的盒子。
今天的总合伙人b一个盒子,Bob试图把球i%b箱号。
求复位的最小成本。
每次移动的花费为y - x ,即移动前后盒子编号的差值的绝对值。
算法:
题目就是要求
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MTg0NQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
先推断 n与 lcm(a,b)的大小,每个周期存在循环。这样把区间缩短避免反复计算。
假设n>lcm(a,b)则 ans = (n/lcm)*solve(lcm)+solve(n%lcm)
否则 ans = solve(n)
设x和y各自等于 i%a和i%b。
我们通过枚举 找规律能发现 t=min(a-x,b-y)是一个段,这一段内abs(x-y)是相等的。
所以仅仅须要用abs(x-y)乘以次数t,在算下一段即可了。
这里要注意t<n-now的情况。本来这一段应该有t个,可是now+t>n了。所以要取t = min(t,n-now)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath> using namespace std; typedef __int64 ll; ll a,b; ll Gcd(ll x,ll y)
{
return y==0?x:Gcd(y,x%y);
} ll abs(ll x)
{
return x>=0? x:(-x);
} ll solve(ll n)
{
ll x=0,y=0,t,v1,v2,now=0;
ll ret = 0;
while(now<n)
{
v1 = a-x;
v2 = b-y;
t = min(v1,v2);
t = min(t,n-now);
ret += t*abs(x-y);
x = (x+t)%a;
y = (y+t)%b;
now += t;
}
return ret;
} int main()
{
int T;
ll n,gcd,lcm,ans;
scanf("%d",&T);
while(T--)
{
scanf("%I64d%I64d%I64d",&n,&a,&b);
gcd = Gcd(a,b);
lcm = a*b/gcd;
if(n>=lcm)
ans = solve(lcm)*(n/lcm) + solve(n%lcm);
else ans = solve(n);
printf("%I64d\n",ans);
}
return 0;
}
魔芋真的不适合 搞数学 o(╯□╰)o
版权声明:本文博主原创文章,博客,未经同意不得转载。
hdu 4710 Balls Rearrangement (数学思维)的更多相关文章
- HDU 4611 Balls Rearrangement 数学
Balls Rearrangement 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4611 Description Bob has N balls ...
- hdu 4710 Balls Rearrangement()
http://acm.hdu.edu.cn/showproblem.php?pid=4710 [code]: #include <iostream> #include <cstdio ...
- hdu 4710 Balls Rearrangement
题意就不说了,刚开始做我竟然傻傻地去模拟,智商捉急啊~~超时是肯定的 求出 a ,b 的最小公倍数,因为n够长的话,就会出现循环,所以就不要再做不必要的计算了.如果最小公倍数大于n的话,就直接计算n吧 ...
- hdu 4710 Balls Rearrangement 数论
这个公倍数以后是循环的很容易找出来,然后循环以内的计算是打表找的规律,规律比较难表述,自己看代码吧.. #include <iostream> #include <cstdio> ...
- hduoj 4710 Balls Rearrangement 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4710 Balls Rearrangement Time Limit: 6000/3000 MS (Java/Ot ...
- HDU 4611 Balls Rearrangement(2013多校2 1001题)
Balls Rearrangement Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Othe ...
- HDU 4611 Balls Rearrangement (数学-思维逻辑题)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4611 题意:给你一个N.A.B,要你求 AC代码: #include <iostream> ...
- HDU 4611 - Balls Rearrangement(2013MUTC2-1001)(数学,区间压缩)
以前好像是在UVa上貌似做过类似的,mod的剩余,今天比赛的时候受baofeng指点,完成了此道题 此题题意:求sum(|i%A-i%B|)(0<i<N-1) A.B的循环节不同时,会有重 ...
- HDU 5570 balls 期望 数学
balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5570 De ...
随机推荐
- spring Jdbc自己主动获取主键。
学习了下springjdbc,感觉挺有用的,相对来说springjdbc 扩展性相当好了 package com.power.dao; import java.lang.reflect.Paramet ...
- 【免费讲座IX算法第一阶段】转专业找CS工作“打狗棒法”
个人经验CS不相干,如何收拾简历?如何获取知识,在最短的时间内找到一份工作需要?如何避免盲目刷称号,迅速制定学习计划?如何准备面试? 星期五.九算法黄蓉老师受邀嘉宾 [在线共享] 她成功转专业的六个月 ...
- Swift - 创建并设置背景(SpriteKit游戏开发)
1,先把背景图片bg.jpg,bg@2x.jpg直接拖进Images.xcassets中 2,设置如下代码(背景图直接铺满整个屏幕) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- HDU 4839 The Game of Coins _(:зゝ∠)_
The Game of Coins mark: #include"cstdio" #include"iostream" #include"queue& ...
- 国际化之MessageFormat与占位符
如果一个字符串文本中包含了多个与国际化相关的数据,可以使用MessageFormat类对这些数据进行批量处理. 例如: 在2016年1月9日的时候,一场台风导致了500间房屋的摧毁和¥1000000元 ...
- 正确理解Python文件读写模式字w+、a+和r+
w+ 和 r+的差别不难理解.还有a+ +同一时候读写,就可以读又可写,边写边读.边读边写,不用flush,用seek 和 tell可測得. fp = open("a.txt", ...
- http2.0笔记
二进制分帧层 定义了如何封装 HTTP 消息并在客户端与服务器之间传输 http2.0的消息传输特点: 流 已建立的连接上的双向字节流 消息 与逻辑消息对应的完整的一系列数据帧 帧 http2.0通信 ...
- MySQL如何修改root密码
MySQL修改用户密码 因为长期不登录MySQL数据库,登录时经常忘记root权限密码.本文提供一个在数据库服务器上修改root密码的方法,本文撰写基础是在xp操作系统下进行. 第一步 ...
- Html 内嵌 选择器属性 Dom操作 JavaScript 事件
HTML标签: 一.通用标签(一般标签) 1.格式控制标签 <font color="#6699aa" face="楷体" size="24&q ...
- C语言常用的宏
01: 防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 02: 重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类 ...