传送门

Problem Description
度度熊在玩一个好玩的游戏。
游戏的主人公站在一根数轴上,他可以在数轴上任意移动,对于每次移动,他可以选择往左或往右走一格或两格。
现在他要依次完成 n 个任务,对于任务 i,只要他处于区间 [ai,bi] 上,就算完成了任务。
度度熊想知道,为了完成所有的任务,最少需要移动多少次?
度度熊可以任意选择初始位置。
 
Input
第一行一个整数 T (1≤T≤10) 表示数据组数。
对于每组数据,第一行一个整数 n (1≤n≤1000) 表示任务数。
接下来 n 行,第 i 行两个整数 ai,bi (1≤ai≤bi≤1000000) 表示任务对应的区间。
 
Output
对于每组数据,一行一个整数表示答案。
 
Sample Input
1
2
1 10
20 30
 
Sample Output
5
 
 
样例描述
选取10为起点,经过的轨迹为10-12-14-16-18-20。
 
Source

题意:给n个区间,你需要依次经过每一个区间,初始位置任选,每次可以移动一步或者两步。问最少需要移动多少次。

题解:在输入的时候依次对有重合部分的区间进行合并,如果最后合并完之后只有一个区间那么初始位置你选这个区间内任意一点你就可以不用移动。当合并后区间数大于1时,下一个区间不是在上一个区间的左边就一定在它右边,我们可以根据第二个区间与第一个区间的位置关系决定初始位置为第一个区间的左端点还是右端点。又因为可以跳一步或者两步,那么你需要判断最后一步是跳一步更优还是两步更优。如果要跳的距离是偶数或者跳到的区间长度为1,显然只能有一种跳法。否则,你就可以往你跳的方向再移动一格,此时我们可以做个标记,如果下一次跳和这一次跳的方向相同那我们就将上一次跳到的点进行移动再计算移动次数。

代码:

#include <bits/stdc++.h>
using namespace std;
const int N = + ;
int a[N],b[N];
int main() {
int T,n;
for (scanf("%d",&T);T--;) {
scanf("%d",&n);
for (int i = ; i < n; i++)
scanf("%d%d",&a[i],&b[i]);
int l = a[],r = b[],i;
for (i = ; i < n; i++) {
int L = max(l,a[i]);
int R = min(r,b[i]);
if (L > R) break;
l = L; r = R;
}
if (i == n) {
printf("0\n");
continue;
}
int fg = ,ans = ,x;
if (b[i] < l) x = l;
else x = r;
for (; i < n-; i++) {
if (x > b[i]) {
if (fg == -) x--;
ans += (x-b[i]+)/;
if ((x-b[i])% == && b[i] - a[i] > ) fg = -;
else fg = ;
x = b[i];
}else if (x < a[i]) {
if (fg == ) x++;
ans +=(a[i] - x + ) /;
if ((a[i]-x)% == && b[i] - a[i] > ) fg = ;
else fg = ;
x = a[i];
}
}
if (x > b[i]) {
if (fg == -) x--;
ans += (x-b[i]+)/;
}else if (x < a[i]) {
if (fg == ) x++;
ans +=(a[i] - x + ) /;
}
printf("%d\n",ans);
}
return ;
}

2019 年百度之星 初赛一 1002 Game的更多相关文章

  1. 2019 年百度之星—初赛一 B题 Game

    题目链接 题意:最开始可以选择任意位置,在一个坐标轴上,依次走到一个区间里面,可以选择走一步两步,求最小步数. 思路:贪心,刚开始合并区间,确定初始位置以及方向.往右走肯定到左端点,往左走先到右端点, ...

  2. 2019 年百度之星·程序设计大赛 - 初赛一 C. HDU 6670 Mindis 离散化+dijkstra

    题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6670 Mindis Time Limit: 4000/2000 MS (Java/Others) M ...

  3. 2019 年百度之星·程序设计大赛 - 初赛一Game HDU 6669 (实现,贪心)

    Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  4. 2019 年百度之星·程序设计大赛 - 初赛四 1001 Strassen

    比赛链接:2019 年百度之星·程序设计大赛 - 初赛四 题目链接:HDU-6719 Strassen C++ 没写出来 于是直接上 Java 暴力. 好像可以用 __int128. import j ...

  5. 2016百度之星 初赛2A ABEF

    只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...

  6. HDU 5690:2016"百度之星" - 初赛 All X

    原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  7. 2016"百度之星" - 初赛(Astar Round2A)HDU 5695 拓扑排序+优先队列

    Gym Class Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  8. 【百度之星初赛A】路径交 LCA+线段树

    [百度之星初赛A]路径交 Problem Description 给定一棵n个点的树,以及m条路径,每次询问第L条到第R条路径的交集部分的长度(如果一条边同时出现在2条路径上,那么它属于路径的交集). ...

  9. 数学 2015百度之星初赛2 HDOJ 5255 魔法因子

    题目传送门 /* 数学:不会写,学习一下这种解题方式:) 思路:设符合条件的数的最高位是h,最低位是l,中间不变的部分为mid,由题意可得到下面的公式(这里对X乘上1e6用a表示,b表示1e6) (h ...

随机推荐

  1. Java多线程遍历文件夹,广度遍历加多线程加深度遍历结合

    复习IO操作,突然想写一个小工具,统计一下电脑里面的Java代码量还有注释率,最开始随手写了一个递归算法,遍历文件夹,比较简单,而且代码层次清晰,相对易于理解,代码如下:(完整代码贴在最后面,前面是功 ...

  2. SuperSocket获取所有连接上的 Session

    你也可以从 AppServer 实例获取所有连接上的 session 然后推送数据到所有客户端: foreach(var session in appServer.GetAllSessions()) ...

  3. Python--day19--random模块

    random模块 >>> import random #随机小数 >>> random.random() # 大于0且小于1之间的小数 0.766433866365 ...

  4. .net Framework 源代码 · ScrollViewer

    本文是分析 .net Framework 源代码的系列,主要告诉大家微软做 ScrollViewer 的思路,分析很简单. 看完本文,可以学会如何写一个 ScrollViewer ,如何定义一个 IS ...

  5. HTML DOM clearInterval() 方法

    定义和用法 clearInterval() 方法可取消由 setInterval() 设置的 timeout. clearInterval() 方法的参数必须是由 setInterval() 返回的 ...

  6. html input onfocus

    <input type="text" value="请输入内容" onfocus="javascript:if(this.value=='请输入 ...

  7. 【js】react-native Could not find iPhone 6 simulator 和 Entry, ":CFBundleIdentifier", Does Not Exist 两种报错解决办法

    一.在运行rn app应用时,react-native run:ios 报错出现   Could not find iPhone 6 simulator  解决办法: 1.react-native r ...

  8. H3C STP可选配置

  9. 【31.93%】【codeforces 670E】Correct Bracket Sequence Editor

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  10. C++中常量成员函数的含义

    C++中常量成员函数的含义 本文内容来源:<C++必知必会> 使用常量成员函数可以改变对象的逻辑状态,虽然对象的物理状态没有发生改变.考虑如下代码,它定义了一个类X: class X{ p ...