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

题目链接

题意:最开始可以选择任意位置,在一个坐标轴上,依次走到一个区间里面,可以选择走一步两步,求最小步数。

思路:贪心,刚开始合并区间,确定初始位置以及方向。往右走肯定到左端点,往左走先到右端点,判断下个区间的和下下个区间的方向是否一致,一致如果到是奇数,则当偶数处理位置,反之,仍然走到

端点上。wa了很多次,细节没注意好。

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#include<queue>
#define ll long long
using namespace std;
const int N=1100000;
int l[1100],r[1100];
int t,n;
struct Node
{
  int a,b;
}e[1100];
int main()
{
  scanf("%d",&t);
  while(t--)
  {
    memset(l,0,sizeof(l));
    memset(r,0,sizeof(r));
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
      scanf("%d%d",&e[i].a,&e[i].b);
    }
    int ans=0;
    l[0]=e[0].a;
    r[0]=e[0].b;
    int j=0;
    for(int i=1;i<n;i++)
    {
          if(e[i].a>=r[j]||e[i].b<=l[j])
          {
            j++;
            l[j]=e[i].a;
            r[j]=e[i].b;
          }
          else if(e[i].a>l[j]&&e[i].b<r[j])
          {
            l[j]=e[i].a;
            r[j]=e[i].b;
          }
          else if(e[i].a>l[j]&&e[i].b>r[j]&&e[i].a<r[j])
          {
            l[j]=e[i].a;
          }
          else if(e[i].a<l[j]&&e[i].b>l[j]&&e[i].b<r[j])
          {
            r[j]=e[i].b;
          }
    }
    int s;
    if(l[1]>r[0])
    {
      s=r[0];
    }
    else
    {
      s=l[0];
    }
    int tmp;
    for(int i=1;i<=j;i++)
    {
      if(r[i]<l[i-1])
      {
        tmp=s-r[i];
        s=r[i];
        if(tmp%2&&l[i]<s&&i+1<=j&&r[i+1]<l[i])
        {
          tmp++;
          s--;
        }
      }
      else if(l[i]>r[i-1])
      {
        tmp=l[i]-s;
        s=l[i];
        if(tmp%2&&r[i]>s&&i+1<=j&&l[i+1]>r[i])
        {
          tmp++;
          s++;
        }
      }
      if(tmp%2)
          ans+=tmp/2+1;
      else
           ans+=tmp/2;
    }
    printf("%d\n",ans);
  }
  return 0;
}

原文地址:https://www.cnblogs.com/2462478392Lee/p/11402621.html

时间: 2024-10-05 13:12:42

2019 年百度之星—初赛一 B题 Game的相关文章

2019 年百度之星 初赛一 1002 Game

传送门 Problem Description 度度熊在玩一个好玩的游戏.游戏的主人公站在一根数轴上,他可以在数轴上任意移动,对于每次移动,他可以选择往左或往右走一格或两格.现在他要依次完成 n 个任务,对于任务 i,只要他处于区间 [ai,bi] 上,就算完成了任务.度度熊想知道,为了完成所有的任务,最少需要移动多少次?度度熊可以任意选择初始位置. Input 第一行一个整数 T (1≤T≤10) 表示数据组数.对于每组数据,第一行一个整数 n (1≤n≤1000) 表示任务数.接下来 n 行

百度之星初赛一 补题

1001 小C的倍数问题 题意: 根据小学数学的知识,我们知道一个正整数x是3的倍数的条件是x每一位加起来的和是3的倍数.反之,如果一个数每一位加起来是3的倍数,则这个数肯定是3的倍数. 现在给定进制P,求有多少个B满足P进制下,一个正整数是B的倍数 的充分必要条件是每一位加起来的和是B的倍数. 我真是一句mmp啊   wcnmlgb 题目读了半天没读懂  后面的签到题也没心思写了 看了别人的题解  也算是明白了  自己真的是菜的可以啊 详细解答:http://blog.csdn.net/qq_

2018 百度之星 初赛 第六题

三原色图 Accepts: 281 Submissions: 1261 Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Problem Description 度度熊有一张 nn 个点 mm 条边的无向图,所有点按照 1,2,\cdots,n1,2,?,n 标号,每条边有一个正整数权值以及一种色光三原色红.绿.蓝之一的颜色. 现在度度熊想选出恰好 kk 条边,满足只用这 kk 条

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

题目传送门 1 /* 2 数学:不会写,学习一下这种解题方式:) 3 思路:设符合条件的数的最高位是h,最低位是l,中间不变的部分为mid,由题意可得到下面的公式(这里对X乘上1e6用a表示,b表示1e6) 4 (h*power+l+mid)*a = (l*power+h+mid)*b 5 可推得:mid = ((h*power+l) * a - (l*power+h) * b) / (a - b); 6 所以可以枚举h,l然后求mid,注意mid的最低位一定是0,因为留出最低位加l或者h 7

2014百度之星初赛(第二场)——Best Financing

2014百度之星初赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[i]天小A收入earnings[i]元(0<=i<n).银行推出的理财产品均为周期和收益确定的,可描述为长度为m的三个整数数组start.finish和interest_rates, 若购买理财产品i(0<=i<m),需要

HDU4828 Grids 2014百度之星初赛题解

看看Catalan数的公式:为 Catalan(n) = C(2n, n) / n+1 = C(2n, n) - C(2n, n-1); (公式0) 然后利用全排序表达:Catalan(n) = (2n)! / (n+1) * (n)!*n!; 那么Catalan(n-1) = (2(n-1))! / n * (n-1)!(n-1)!; 然后两者相除就得到:Catalan(n) = (4*n-2) / (n+1) (公式1)//这个就是递归的终极公式了. 一般使用动态规划的递推公式是:Catal

hdu 4832 百度之星初赛二B

把横的和竖的分开考虑 //#pragma comment(linker, "/STACK:102400000,102400000") #include<iostream> #include<vector> #include<algorithm> #include<cstdio> #include<queue> #include<stack> #include<string> #include<ma

2014 百度之星初赛题解1001 - Energy Conversion

Problem Description 魔法师百小度也有遇到难题的时候-- 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力. 过了许久,百小度终于读懂魔法文字的含义:石门里面有一个石盘,魔法师需要通过魔法将这个石盘旋转X度,以使上面的刻纹与天相对应,才能打开石门. 但是,旋转石盘需要N点能量值,而为了解读密文,百小度的能量值只剩M点了!破坏石门是不可能的,因为那将需要更多的能量.不过,幸运的是,作为魔法师的百小度可以耗费V点能量,使

2014百度之星初赛(第二场)——JZP Set

2014百度之星初赛(第二场)--JZP Set Problem Description 一个{1, ..., n}的子集S被称为JZP集,当且仅当对于任意S中的两个数x,y,若(x+y)/2为整数,那么(x+y)/2也属于S. 例如,n=3,S={1,3}不是JZP集,因为(1+3)/2=2不属于S.但是{1,2,3}的其他子集都属于S,所以n=3时有7个JZP集 给定n,求JZP集的个数. Input 第一行为T,表示输入数据组数. 每组数据包含一行整数n. 限制条件 1<=T<=10^5