博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4611 Balls Rearrangement
阅读量:4921 次
发布时间:2019-06-11

本文共 1186 字,大约阅读时间需要 3 分钟。

从A中向B中移动和从B中向A中移动的效果是一样的,我们假设从B中向A中移动 而且A>B

我们先求出所有在B[0]上的点移动到A上的分布情况 可以求出花费

当我们要求B[1]上的点移动到A上的分布情况时 相当于B[0]在A上的分布情况水平右移一个单位

由于B[1]点对于B[0]也向后移动了一个单位 所有相对位置没有移动

但是A中有一个地方需要改动 那就是每次A中最后一个位置的点需要移动到A[0]位置(因为对A进行取模的原因)

还有一个要注意的情况就是 B 在向后移动的时候 点的个数可能会减小 要特殊处理一下

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;typedef long long ll;typedef unsigned int uint;typedef pair
pp;const double eps=1e-9;const int INF=0x3f3f3f3f;const ll MOD=1000000007;const int H=210000;const int K=100001;ll a[H];int f(int x){ return x+K;}ll readya(ll N,ll A,ll B){ ll lcm=A*B/(__gcd(A,B)); int n=lcm/B; int k=0; ll num=(N/B); if(N%B) ++num; for(int i=0;i
>N>>A>>B; if(B>A) swap(A,B); if(A==B) {printf("0\n");continue;} ll L=0; ll R=readya(N,A,B); int num=N/B; if(N%B) ++num; ll ans=L+R; for(int i=1;i
0) {R-=abs(x%A-i);} if(x%A-i<0) {L-=abs(x%A-i);} num=tmp; } ans+=(L+R); } cout<
<

 

 

转载于:https://www.cnblogs.com/liulangye/p/3216732.html

你可能感兴趣的文章
李晓菁201771010114《面向对象程序设计(Java)》第三周学习总结
查看>>
Typedef与Struct
查看>>
Linux常用网络命令整理
查看>>
C++ 面向对象
查看>>
Maven Nexus
查看>>
js 判断滚动条的滚动方向
查看>>
关于springboot启动时候报错:springboot Failed to parse configuration class [Application]
查看>>
java中Class的使用详解
查看>>
css,js文件后面加一个版本号
查看>>
webpack第一节(2)
查看>>
python之asyncio三种应用方法
查看>>
Laravel 的文件存储 - Storage
查看>>
转:[Server] 在 Windows 上安裝 PHP 5.3 開發環境
查看>>
【IE6的疯狂之二】IE6中PNG Alpha透明(全集)
查看>>
第一个Shell脚本
查看>>
C++ 小笔记
查看>>
Mysql 语句优化
查看>>
例子:进度条
查看>>
包含单引号的sql
查看>>
HTML 基础 2
查看>>