「JOI 2019 Final」 硬币收藏
题目链接
\(Solution\)
先将所有棋子移动到最近的目标点上
我们设两个变量\(ans1,ans2\)表示到目前为止这个点上可以移动棋子的数目,然后\(f[i][j]\)表示\((i,j)\)上有多少个棋子,\(ans\)为答案
如果为正表示从左边移到右边
如果为负表示从右边移到左边
我们考虑怎么维护这个东西
我们考虑一下两种大情况:
这个位置上原本有值
那么我们只要将\(ans+(f[i][j]-1)\)即可这个位置本来没有值
我们考虑三种情况,我们以一行为例,其余的一行同理- \(ans1\)大于0,那么我们只需要将\(ans1--\)
- \(ans1<0\)&&\(ans2>0\) 我们将\(ans2--,ans+1\)表示从下面移上来(但是对于第一行的时候要注意一个事,下面会讲)
- 其余情况 \(ans1--\),表示从右边要借一个过来。
上面留了一个坑,对于第一行的时候后,在下面一行往上移的时候我们还要判断下面一行的情况。如果下面一行\(ans2==1,f[i][2]==0\)那么就不能移,因为要留着自己用
然后处理完之后会得到这一行的\(ans1\)和\(ans2\)于是我们在判断一下\(ans1\)和\(ans2\)是否为一正一负.
如果是则把绝对值小的那个移到另一行去,答案加上这个绝对值。
每次弄完之后,答案加上\(abs(ans1)+abs(ans)\)表示往后面移这些硬币
\(Code\)
#include<bits/stdc++.h>
#define int long long
#define rg register
#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
using namespace std;
const int N=1e6+10;
int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
return f*x;
}
int X[N],Y[N],n,ans,flag1,flag2,ans1,ans2;
int f[N][3];
void solve(int x,int y){
int nowx=x,nowy=y;
if(x<=n&&x>=1&&y<=2&&y>=1) {f[x][y]++;return ;}
if(x>n) x=n;
if(x<1) x=1;
if(y>2) y=2;
if(y<1) y=1;
f[x][y]++,ans+=abs(nowx-x)+abs(nowy-y);
}
main(){
n=read();
for(int i=1;i<=2*n;i++)
X[i]=read(),Y[i]=read(),solve(X[i],Y[i]);
for(int i=1;i<=n;i++){
if(f[i][1]>1) ans1+=f[i][1]-1;
if(f[i][2]>1) ans2+=f[i][2]-1;
if(f[i][1]==0){
if(ans1>0) ans1--;
else if(ans2>0&&(ans2>1||(ans2==1&&f[i][2]))) ans2--,ans+=1;
else ans1--;
}
if(f[i][2]==0){
if(ans2>0) ans2--;
else if(ans1>0) ans1--,ans+=1;
else ans2--;
}
if(ans1<0&&ans2>0) {
if(abs(ans1)<abs(ans2))
ans2=ans2+ans1,ans+=abs(ans1),ans1=0;
else ans1=ans2+ans1,ans+=abs(ans2),ans2=0;
}
if(ans2<0&&ans1>0) {
if(abs(ans1)<abs(ans2))
ans2=ans2+ans1,ans+=abs(ans1),ans1=0;
else ans1=ans2+ans1,ans+=abs(ans2),ans2=0;
}
ans+=abs(ans1)+abs(ans2);
}
cout<<ans;
return 0;
}
「JOI 2019 Final」 硬币收藏的更多相关文章
- 【LOJ】#3014. 「JOI 2019 Final」独特的城市(长链剖分)
LOJ#3014. 「JOI 2019 Final」独特的城市(长链剖分) 显然我们画一条直径,容易发现被统计的只可能是直径某个距离较远的端点到这个点的路径上的值 用一个栈统计可以被统计的点,然后我们 ...
- loj 3014「JOI 2019 Final」独特的城市
loj 我本来是直接口胡了一个意思一样的做法的,但是因为觉得有点假+实现要用并查集(?)就卡了好一会儿... 对于一个点\(x\)来说,独特的点一定在它的最长链上,如果有独特的点不在最长链上,那么最长 ...
- LOJ#2351. 「JOI 2018 Final」毒蛇越狱
LOJ#2351. 「JOI 2018 Final」毒蛇越狱 https://loj.ac/problem/2351 分析: 首先有\(2^{|?|}\)的暴力非常好做. 观察到\(min(|1|,| ...
- 「JOI 2017 Final」JOIOI 王国
「JOI 2017 Final」JOIOI 王国 题目描述 题目译自 JOI 2017 Final T3「 JOIOI 王国 / The Kingdom of JOIOI」 JOIOI 王国是一个 H ...
- 【题解】LOJ2759. 「JOI 2014 Final」飞天鼠(最短路)
[题解]LOJ2759. 「JOI 2014 Final」飞天鼠(最短路) 考虑最终答案的构成,一定是由很多飞行+一些上升+一些下降构成. 由于在任何一个点上升或者下降代价是一样的,所以: 对于上升操 ...
- 「JOI 2014 Final」飞天鼠
「JOI 2014 Final」飞天鼠 显然向上爬是没有必要的,除非会下降到地面以下,才提高到刚好为0. 到达一个点有两种情况:到达高度为0和不为0. 对于高度不为0的情况,显然花费的时间越少高度越高 ...
- 「JOI 2015 Final」城墙
「JOI 2015 Final」城墙 复杂度默认\(m=n\) 暴力 对于点\((i,j)\),记录\(ld[i][j]=min(向下延伸的长度,向右延伸的长度)\),\(rd[i][j]=min(向 ...
- 「JOI 2015 Final」舞会
「JOI 2015 Final」舞会 略微思考一下即可知该过程可以化为一棵树.(3个贵族中选择1个,即新建一个节点连向这3个贵族). 该树的结点个数为\(2n\). 考虑二分答案mid. 判定的是公主 ...
- 「JOI 2015 Final」分蛋糕 2
「JOI 2015 Final」分蛋糕 2 题解 这道题让我想起了新年趣事之红包这道DP题,这道题和那道题推出来之后的做法是一样的. 我们可以定义dp[i][len][1] 表示从第i块逆时针数len ...
随机推荐
- gflags 编译动态库
gflags 编译动态库 这里涉及到gflags的安装,原来使用 sudo apt-get install libgflags-dev 但是后面有人在环境中下载安装了libgflags的安装包,解压后 ...
- [转载]Flex的文件规则
原文在:https://blog.csdn.net/hczhiyue/article/details/20483209 文章中给的一个定义很明白,对于初学者来说很有帮助: 什么是 FLEX?它是一个自 ...
- pymssql文档(转)
pymssql methods set_max_connections(number) -- Sets maximum number of simultaneous database connecti ...
- spring ioc aop 理解
OC,依赖倒置的意思,所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B.所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如果 ...
- ubuntu16.04环境LNMP实现PHP5.6和PHP7.2
最近因为公司突然间说要升级php7,所以做个记录 PPA 方式安装 php7.2 : sudo apt-get install software-properties-common 添加 php7 的 ...
- 网络协议相关面试问题-http协议相关面试问题
HTTP协议简介: 一些基本概念: 协议:指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则. HTTP协议:超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML ...
- Python——print函数输出对齐问题
原创声明:本文系博主原创文章,转载及引用请注明出处. 当我们使用print函数时,若指定输出宽度,例如: >>> import math >>> print('|P ...
- git生成公钥public key并添加SSH key。git乌龟gerrit下推送git【server sent :publickey】
一.key 码云链接:http://git.mydoc.io/?t=180845#text_180845 博客链接: 方式一:https://blog.csdn.net/xb12369/article ...
- SpringMVC配置文件详解:<context:annotation-config/>和<context:component-scan base-package=""/>和<mvc:annotation-driven />
原文地址:https://www.cnblogs.com/lcngu/p/5080702.html Spring配置文件详解:<context:annotation-config/>和&l ...
- UVa136 Ugly Numbers(优先队列priority_queue)
Ugly Numbers 题目 Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, ...