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 ...
随机推荐
- Delphi - 闲来无事,自己写个Timer玩玩(多线程Timer)
明天去坐火车,回家,今天就没有事做,本来在弄一个跨进程获取其他程序里面组件,如ListView,ListBox,Button等的信息,突然有个想法自己写个Timer,不用SetTimer函数,我们自己 ...
- 使用boost io_service时,需要注意的东西
boost::asio 在创建io_service时,可以指定线程数,如果没有指定,默认是一个线程,也就是io_service run的那个线程,如果没有任务运行,该线程会退出. 如果在创建的时候指定 ...
- 为什么要用BitSet
BitSet适用于一类型boolean判断,Java的BitSet在这类型判断中非常高效. 举例说明:在判断前2000万数字中素数个数的程序中,如果使用最基本的素数判断代码: package com; ...
- Kendo UI开发教程(22): Kendo MVVM 数据绑定(十一) Value
Value绑定可以把ViewModel的某个属性绑定到DOM元素或某个UI组件的Value属性.当用户修改DOM元素或UI组件的值时,绑定的ViewModel的值也随之发生改名.同样,如果ViewMo ...
- poj 2126 Factoring a Polynomial 数学多项式分解
题意: 给一个多项式,求它在实数域内的可分解性. 分析: 代数基本定理. 代码: //poj 2126 //sep9 #include <iostream> using namespace ...
- org.apache.hadoop.ipc.Client: Retrying connect to server异常的解决
检查发现是DataNode一直连接不到NameNode. 检查各个节点在etc/hosts中的配置是否有127.0.1.1 xxxxxx.如果有把其屏蔽或者删除,重启各节点即可. 原因:127.0.1 ...
- QNX---Interrupt vector numbers(原创!!!)
Interrupt intr Description 0 A clock that runs at the resolution set by ClockPeriod() 1 Keyboard 2 S ...
- shell oracle
#!/bin/sh traffic= rm -rf test.txt data=`sqlplus -S anoscfg/anoscfg <<EOF spool test.txt set f ...
- java如何运行OS命令(转)
•javac TestRunTime.java•java TestRunTime hostname // 执行“hostname”Linux命令•即可看到输出 import java.io.IOExc ...
- Android监听外部存储设备的状态(SD卡、U盘等等)
近期在项目中须要对外部存储设备的状态进行监听,所以整理了此笔记,以便日后查看. 外部存储设备的状态变化时发出的广播 对照不同状态下的广播 1. 插入外部SD卡时: 2. 移除外部SD卡时: 3. 连接 ...