博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 6669 Game
阅读量:5313 次
发布时间:2019-06-14

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

解题思路

首先我们要选一个起点,这个起点应该在第一个区间内,然后再看第二个区间在左边还是右边以便移动,但转念一想,我们可以把起点直接选在前一堆区间的交集上,于是思路就有了——依次把所有区间取交集,如果没有交集就搞一个新的区间,之后的接着取交集,得到一堆合并出来的区间。然后就在合并的区间上移动就好。

有一个细节要注意。举个例子,如果现在位置在\(3\),之后的两个目标区间依次是\([6,7]\)\([9,10]\),那么我们如果经过两次移动(先1后2)到达第一个区间的左端点\(6\),下一步就要再移动两次才能到达\(9\),所以第一步不妨用相同的代价(两次移动)多走点,走到7,那么第二步到\(9\)就只用移动一次就好。

比赛时合并区间写的有问题,WA*7,最后两题惨淡收场……

源代码

#include
#include
int T,n;struct D{ int a,b;}p[1010];int num;int l,r;int main(){ scanf("%d",&T); while(T--) { num=0; scanf("%d%d%d",&n,&l,&r); for(int i=1,a,b;i
r||b
>1; if(delta&1) { ans++; if(i+1
<=p[i].b&&p[i+1].a>pos) pos++; } } else//向左走 { int delta=pos-p[i].b; pos=p[i].b; ans+=delta>>1; if(delta&1) { ans++; if(i+1
=p[i].a&&p[i+1].b

转载于:https://www.cnblogs.com/wawcac-blog/p/11372727.html

你可能感兴趣的文章
VMware中CentOS设置静态IP
查看>>
[poj1006]Biorhythms
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
Hover功能
查看>>
js千分位处理
查看>>
Mac---------三指拖移
查看>>
字符串类型的相互转换
查看>>
HTTP状态码
查看>>
iOS如何过滤掉文本中特殊字符
查看>>
基础学习:C#中float的取值范围和精度
查看>>
MongoDB-CRUD
查看>>
javaagent 简介
查看>>
python升级安装后的yum的修复
查看>>
Vim配置Node.js开发工具
查看>>
web前端面试题2017
查看>>
ELMAH——可插拔错误日志工具
查看>>
MySQL学习笔记(四)
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
两数和
查看>>
移动设备和SharePoint 2013 - 第3部分:推送通知
查看>>