http://acm.hdu.edu.cn/showproblem.php?pid=6669
题意:有n个任务要依次完成,每个任务都是:只要站在[Li,Ri][L_i,R_i][Li​,Ri​]区间,就完成了。起点任选,每次走1步或者2步,求最少走几步。
思路:首先读好题,注意依次,不能打乱顺序。首先我们根据第一个与前i个区间不相交的区间在前i个的并区间的右还是左,就可以确定起点,然后依次走就行了,有一个问题是,如果走的步数是奇数,并且再下一个区间还是同方向,可能走到这个区间的下一格更好,这样的话,怎么判断呢?如果用循环,代码写的又长又乱,一直wa。遂开始时预处理好,一直并区间,形成cnt个相邻绝对不相交的区间,然后就好判断了。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1000+100;
const int maxl=1000000+100;
const int INF=0x3f3f3f3f;int T,n,ans,cnt;
struct seg{int l,r;
}a[maxn],b[maxn];int dist(int pos,int p)
{return min(abs(b[pos].l-p),abs(b[pos].r-p));
}void init()
{cin>>n;ans=0;for(int i=1;i<=n;i++)scanf("%d%d",&a[i].l,&a[i].r);cnt=1;b[1]=a[1];for(int i=2;i<=n;i++){if(a[i].l>b[cnt].r || a[i].r<b[cnt].l)b[++cnt]=a[i];else{b[cnt].l=max(b[cnt].l,a[i].l);b[cnt].r=min(b[cnt].r,a[i].r);}     }
}void solve()
{if(cnt==1)return;int p;if(b[2].l>b[1].r)p=b[1].r;else p=b[1].l;for(int i=2;i<=cnt;i++){if(b[i].l>b[i-1].r){int d=b[i].l-p;if((d&1) && b[i].l+1<=b[i].r && b[i+1].l>b[i].r)p=b[i].l+1;else p=b[i].l;ans+=ceil(1.0*d/2);}else{int d=p-b[i].r;if((d&1) && b[i].r-1>=b[i].l && b[i+1].r<b[i].l)p=b[i].r-1;else p=b[i].r;ans+=ceil(1.0*d/2);}}
}int main()
{// freopen("input.in","r",stdin);cin>>T;while(T--){      init();solve();cout<<ans<<endl;}return 0;
}

HDU6669 Game相关推荐

  1. Game(HDU-6669)

    Problem Description 度度熊在玩一个好玩的游戏.  游戏的主人公站在一根数轴上,他可以在数轴上任意移动,对于每次移动,他可以选择往左或往右走一格或两格.  现在他要依次完成 n 个任 ...

  2. 基础算法 —— 贪心算法

    [概述] 贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略. 简单来说,贪心策略是一种在每次决策时采取当前意义下最优策略的算法,做出的选择至少在某种约束条件 ...

最新文章

  1. 深入剖析微软Office Word主控文档利与弊
  2. Mysql:mysql 控制台程序的提示符 prompt 字符串设置
  3. 跟正刊学习SCI英文写作——摘要部分的拆解
  4. 微信开发 网页授权获取用户基本信息
  5. IOS关于键盘的弹出和收起
  6. 268 missing number
  7. ## c 连接字符_用于字符比较的C#程序
  8. sd省队集训d1t1
  9. json数据出现$ref: $.list[0]的解决办法
  10. 毕设题目:Matlab验证码识别
  11. 计算机组成原理第三版第四章,计算机组成原理第四章答案
  12. PLSQL和ORACLE客户端安装
  13. sqlserver用sql语句备份数据库
  14. win10WIFI图标消失,只显示一个带红叉的窗口(或者飞行模式的符号)
  15. 火焰纹章16进制是怎么算_火焰是值得你的时间
  16. 无线路由器经常掉线怎么办?
  17. 用java输出出生日期,生成随机出生日期
  18. 如何使用 Docker 部署一个私有化的为知笔记
  19. 如何判断横屏还是竖屏?
  20. ORA-28000 帐户已被锁定问题处理

热门文章

  1. 吵翻了!导师确认录取后却被学生放了鸽子,生气之余导师建了个“失信名单”挂到网上
  2. PostgreSQL的json和jsonb比较
  3. 【预测模型-ELM分类】基于鲸鱼算法优化核极限学习机实现数据分类附matlab代码
  4. Altium Designer PCB板框扩大
  5. WordNet介绍,一个开放知识图谱
  6. 软件工程(数据流图例题详解)
  7. 字节跳动 数据分析 一轮技术面
  8. 正大国际期货:如何提升外盘恒指交易技巧?
  9. PHP程序员开发win32应用程序之梦
  10. 一个非常好用的图片切割工具(c# winform开发)