HDU 6669 Game
解题思路
首先我们要选一个起点,这个起点应该在第一个区间内,然后再看第二个区间在左边还是右边以便移动,但转念一想,我们可以把起点直接选在前一堆区间的交集上,于是思路就有了——依次把所有区间取交集,如果没有交集就搞一个新的区间,之后的接着取交集,得到一堆合并出来的区间。然后就在合并的区间上移动就好。
有一个细节要注意。举个例子,如果现在位置在\(3\),之后的两个目标区间依次是\([6,7]\)、\([9,10]\),那么我们如果经过两次移动(先1后2)到达第一个区间的左端点\(6\),下一步就要再移动两次才能到达\(9\),所以第一步不妨用相同的代价(两次移动)多走点,走到7,那么第二步到\(9\)就只用移动一次就好。
比赛时合并区间写的有问题,WA*7,最后两题惨淡收场……
源代码
#include<cstdio>
#include<algorithm>
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<n;i++)
{
scanf("%d%d",&a,&b);
if(a>r||b<l)
{
p[num++]={l,r};
l=a;
r=b;
}
else
{
l=std::max(l,a);
r=std::min(b,r);
}
if(i==n-1) p[num++]={l,r};//比赛时这句话被我写到循环外面去了……
}
int pos;
if(p[0].b<p[1].a) pos=p[0].b;
else pos=p[0].a;
long long ans=0;
for(int i=1;i<num;i++)
{
if(pos<p[i].a)//向右走
{
int delta=p[i].a-pos;
pos=p[i].a;
ans+=delta>>1;
if(delta&1)
{
ans++;
if(i+1<num&&pos+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<num&&pos-1>=p[i].a&&p[i+1].b<pos) pos--;
}
}
}
printf("%lld\n",ans);
}
return 0;
}
HDU 6669 Game的更多相关文章
- 2019 年百度之星·程序设计大赛 - 初赛一Game HDU 6669 (实现,贪心)
Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
- hdu 4481 Time travel(高斯求期望)(转)
(转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...
- HDU 3791二叉搜索树解题(解题报告)
1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...
随机推荐
- cookie,session,token的理解
Get POST 区别异同点 淘宝token的 理解 过程算法 防止伪造请求 伪造相对难 简单发展史 登录的操作: 哪些人往自己的购物车中放商品, 也就是说我必须把每个人区分开,这就是一个 ...
- 使用antd List组件实现轮播图
import { List, Avatar, Carousel } from 'antd'; import { connect } from 'dva'; import './lamp.less' c ...
- Java Web开发技术教程入门-数据库
补更:阅战阅勇第六天 今天阅读了这本书的第六章-访问数据.首先,这本书讲解的是MySql数据库,它是一个关系型数据库管理系统,是由瑞典MySqlAB公司开发,目前属于Oracle旗下公司.在web应用 ...
- win10子系统Ubuntu重置
重置: 在win10命令行下执行: lxrun /uninstall /full 安装: win+R打开bash 执行命令: lxrun /install /y
- docker在mac下安装及配置阿里云镜像加速
安装 brew cask install docker 配置 关于阿里云加速地址,下面会有详细说明 阿里云官方镜像加速 官方文档:https://help.aliyun.com/document_de ...
- EJS学习(三)之语法规则中
⚠️实例均结合node,也就是AMD规范版本 ejs中使用render()表示渲染文本 接收三个参数:模版字符串.data.options,返回一个字符串 const ejs = require('e ...
- 111、什么是stack (Swarm18)
参考https://www.cnblogs.com/CloudMan6/p/8119150.html 什么是 stack ? 在将这个之前先回顾一下前面部署WordPress的过程: ...
- Nginx如何配置反向代理
server { listen 80; server_name 代理域名; location / { proxy_pass 应用域名:应用端口; proxy_set_header Host $host ...
- 使用redislive监控redis
redis监控工具redislive的安装 1. pip安装 如果主机没有pip先安装pip工具 wget --no-check-certificate https://github.com/pypa ...
- 服务命令(systemctl的使用)
常用的service与systemctl命令的对比 应用举例: ●start:开启服务 ●stop:停止服务 ●status:参数来查看服务运行情况 ●restart:重新加载服务 应用举例·: #启 ...