码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-08-23 22:16:13      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:node   stream   +=   i++   多次   efi   nod   链接   lse   

题目链接

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

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

端点上。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;
}

 

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

标签:node   stream   +=   i++   多次   efi   nod   链接   lse   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!