题面

解析

首先题目可以理解为把一些点放进一个框里,每个格子只能放一个.

那么显然你可以先把这个点移到框里离它最近的格子里,

(这个时候格子里可以放很多个)

然后再在框里乱跑移动.

那么我们先考虑只有一行,

这时硬币只能左右移动.

于是可以开一个数组\(f[i]\)记录这个格子里有几个硬币.

但不同的一点是,桶的初始值为\(-1\).

也就是说放了一个硬币的格子的值是\(0\).

然后再从\(1\)到\(n\)遍历,

如果\(f[i]<0\)说明它需要右边的硬币移过来,

而\(f[i]>0\)就说明它这里的硬币要移到右边去.

然后\(f[i+1]+=f[i]\),表示把它的需求传到下一个,

并且\(ans+=f[i]\),因为有\(f[i]\)个硬币移动了一个格子.

(上面这一段最好一起看完了再理解)

然后有两行的话,就只是多了一个上下移动,

因为上下移动不会比左右动差.

于是先考虑能不能上下移动,再转移就行了.

code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
#include <algorithm>
#define int long long
#define pii pair<int,int>
#define fi first
#define sc second
#define fre(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
using namespace std; inline int read(){
int sum=0,f=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return f*sum;
} const int N=1000005;
struct node{int x,y;}a[N];
int n,tot,ans;
int f[N][3]; signed main(){
n=read();
for(int i=1;i<=(n<<1);i++) a[i].x=read(),a[i].y=read();
for(int i=1;i<=n;i++) f[i][1]=f[i][2]=-1;
for(int i=1;i<=(n<<1);i++){
int xx=max((int)1,min(a[i].x,n)),yy=max((int)1,min(a[i].y,(int)2));
ans+=abs(xx-a[i].x)+abs(yy-a[i].y);
f[xx][yy]++;
}
for(int i=1;i<=n;i++){
if(f[i][1]>0&&f[i][2]<0){
int ret=min(abs(f[i][1]),abs(f[i][2]));
f[i][1]-=ret;f[i][2]+=ret;
ans+=ret;
}
else if(f[i][1]<0&&f[i][2]>0){
int ret=min(abs(f[i][1]),abs(f[i][2]));
f[i][2]-=ret;f[i][1]+=ret;
ans+=ret;
}
ans+=abs(f[i][1]+f[i][2]);
f[i+1][1]+=f[i][1];f[i+1][2]+=f[i][2];
}
printf("%lld\n",ans);
return 0;
}

题解 [JOI 2019 Final] 硬币收藏的更多相关文章

  1. 题解 [JOI 2019 Final] 独特的城市

    题面 解析 首先有一个结论, 对一个点\(x\)有贡献的城市 肯定在它到离它较远的直径的端点的链上. 假设离它较远的端点是\(S\), 如果有一个点\(u\)不在\(x\)到\(S\)的链上, 却对\ ...

  2. JOI 2019 Final合集

    JOI 2019 Final 合集 #3010. 「JOI 2019 Final」勇者比太郎 其实如果读懂题了就是水题了 题目就是让你求满足条件的\(JOI​\),使得\(O​\)在\(J​\)同行的 ...

  3. [LOJ3014][JOI 2019 Final]独特的城市——树的直径+长链剖分

    题目链接: [JOI 2019 Final]独特的城市 对于每个点,它的答案最大就是与它距离最远的点的距离. 而如果与它距离为$x$的点有大于等于两个,那么与它距离小于等于$x$的点都不会被计入答案. ...

  4. 【LOJ】#3014. 「JOI 2019 Final」独特的城市(长链剖分)

    LOJ#3014. 「JOI 2019 Final」独特的城市(长链剖分) 显然我们画一条直径,容易发现被统计的只可能是直径某个距离较远的端点到这个点的路径上的值 用一个栈统计可以被统计的点,然后我们 ...

  5. 「JOI 2019 Final」 硬币收藏

    题目链接 戳我 \(Solution\) 先将所有棋子移动到最近的目标点上 我们设两个变量\(ans1,ans2\)表示到目前为止这个点上可以移动棋子的数目,然后\(f[i][j]\)表示\((i,j ...

  6. loj 3014「JOI 2019 Final」独特的城市

    loj 我本来是直接口胡了一个意思一样的做法的,但是因为觉得有点假+实现要用并查集(?)就卡了好一会儿... 对于一个点\(x\)来说,独特的点一定在它的最长链上,如果有独特的点不在最长链上,那么最长 ...

  7. 【题解】LOJ2759. 「JOI 2014 Final」飞天鼠(最短路)

    [题解]LOJ2759. 「JOI 2014 Final」飞天鼠(最短路) 考虑最终答案的构成,一定是由很多飞行+一些上升+一些下降构成. 由于在任何一个点上升或者下降代价是一样的,所以: 对于上升操 ...

  8. JOI 2018 Final 题解

    题目列表:https://loj.ac/problems/search?keyword=JOI+2018+Final T1 寒冬暖炉 贪心 暴力考虑每相邻两个人之间的间隔,从小到大选取即可 #incl ...

  9. 「JOI 2017 Final」JOIOI 王国

    「JOI 2017 Final」JOIOI 王国 题目描述 题目译自 JOI 2017 Final T3「 JOIOI 王国 / The Kingdom of JOIOI」 JOIOI 王国是一个 H ...

随机推荐

  1. Java基础---Java方法的重载Overload

    对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦. 方法的重载(Overload):多个方法的名称一样,但是参数列表不一样.好处:只需要记住唯一一个方法名称,就可以实 ...

  2. 【转】spring基础:@ResponseBody,PrintWriter用法

    理解:很多情况我们需要在controller接收请求然后返回一些message. 1.在springmvc中当返回值是String时,如果不加@ResponseBody的话,返回的字符串就会找这个St ...

  3. BP(back propagation)误差逆传播神经网络

    [学习笔记] BP神经网络是一种按误差反向传播的神经网络,它的基本思想还是梯度下降法,中间隐含层的误差和最后一层的误差存在一定的数学关系,(可以计算出来),就像误差被反向传回来了,所以顾名思义BP.想 ...

  4. 大话OSI七层协议

    大白话OSI七层协议 互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层.实际上这个七层是不存在的.没有这七层的概念,只是人为的划分而已.区 ...

  5. Scratch教程:谁是真悟空

    在西游记中,有一集是“真假悟空”,六耳猕猴变成了悟空的模样与真悟空真假难辨,打的不可开交. 在Scartch中,我们常常会使用一个本体来生成多个克隆体,这在开发过程中有重要的意义.但在实际操作中,每个 ...

  6. C语言之反汇编揭秘

    title: 'C语言之反汇编揭秘' tags: 汇编与反汇编 categories: 汇编与反汇编 copyright: true abbrlink: 'b1c9' date: 2019-09-07 ...

  7. rman备份跳过read only数据文件,减少备份总量,加快备份时间

    客户需求,RMAN备份时间过长,想缩短备份时间,优化备份. 客户基于表空间进行历史数据归档的方式,将历史的表空间进行read only,想让RMAN跳过只读表空间,减少RMAN备份的数据总量,从而缩短 ...

  8. 写文章 通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!

    网上关于Java中锁的话题可以说资料相当丰富,但相关内容总感觉是一大串术语的罗列,让人云里雾里,读完就忘.本文希望能为Java新人做一篇通俗易懂的整合,旨在消除对各种各样锁的术语的恐惧感,对每种锁的底 ...

  9. SQL Server系统函数:类型转换函数

    原文:SQL Server系统函数:类型转换函数 1.基本的转化 SELECT CAST(2008 as varchar(4)) + ' year!' SELECT CONVERT(varchar(4 ...

  10. 把一个质量为M0 的物体加速到 时间慢100倍 需要多大能量

    洛伦兹系数  γ = 100: 运动时候的质量  M = γM0 速度   v = c*sqrt(1-1/γ2) E = 1/2 * m0c2  *γ* (1-1/γ2) 如果一个60kg 的人想要加 ...