题面

解析

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

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

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

然后再在框里乱跑移动.

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

这时硬币只能左右移动.

于是可以开一个数组\(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. 习题一初步理解时间复杂度大O表示法案例

    1.如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a.b.c可能的组合? 如上:a+b+c=1000, a平方+b平方=c平方  求出所有abc可能的组合 ...

  2. jquery绑定input的change事件

    ### jquery绑定input的change事件 背景:在做一个登录页时,如果用户未输入验证码则无法点击登录按钮,所以想到了用input的change事件,但是在写完后发现无法监听input值的改 ...

  3. 100天搞定机器学习|Day3多元线性回归

    前情回顾 [第二天100天搞定机器学习|Day2简单线性回归分析][1],我们学习了简单线性回归分析,这个模型非常简单,很容易理解.实现方式是sklearn中的LinearRegression,我们也 ...

  4. Hibernate一对多自关联、多对多关联

    今天分享hibernate框架的两个关联关系    多对多关系注意事项 一定要定义一个主控方 多对多删除 主控方直接删除 被控方先通过主控方解除多对多关系,再删除被控方 禁用级联删除 关联关系编辑,不 ...

  5. Codefroces 1245 F. Daniel and Spring Cleaning

    传送门 考虑简单的容斥 设 $F(n,m)$ 表示 $a \in [1,n] , b \in [1,m]$ 的满足 $a+b=a \text{ xor } b$ 的数对的数量 那么答案即为 $F(r, ...

  6. metronic-v4.6 使用经验

    1.弹框居中显示 上下居中 需要上下居中引用  bootstrap-modalmanager.js 左右居中 修改 bootstrap-modal.js 中 this.$element.css('ma ...

  7. 简单标签(SimpleTag) 学习

    一.由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编写和调用的SimpleTag接口 ...

  8. Docker启动Elasticsearch报错java.nio.file.AccessDeniedException

    报错信息 Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes 问题分析 表面上是说容 ...

  9. 解决IE8中select下拉列表文字上下不居中的问题

    对IE8及以下的浏览器设置padding属性,其他浏览器则设置line-height 属性

  10. Hibernate-validate工具类,手动调用校验返回结果

    引言:在常见的工程中,一般是在Controller中校验入参,校验入参的方式有多种,这里介绍的使用hibernate-validate来验证,其中分为手动和自动校验,自动校验可以联合spring,使用 ...