http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1538

很奇妙的一个题,开始没有思路.问了别人才知道.

题目的意思可以理解成上图中,从0点开始向右走,走到n+1点需要最少步数。思路是:因为走某些点时,必须先走另外一点,所以可以用贪心算法,将限制条件可以看成区间,求出它们的并集,如下图:

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<cmath>
#include<cstdio>
using namespace std;
const int maxn=;
int l[maxn],r[maxn],vis[maxn];
int c[maxn],d[maxn];
int main()
{
//freopen("a.txt","r",stdin);
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=;i<=n;i++)
l[i]=i,r[i]=i;
memset(vis,,sizeof(vis));
for(int i=;i<m;i++)
{
scanf("%d%d",&c[i],&d[i]);
l[d[i]]=c[i];
r[c[i]]=d[i];
vis[c[i]]=vis[d[i]]=;
}
int flag=,last=,ans=,lx,rx;
for(int i=;i<=n;i++)
{
if(!vis[i]) continue;
//printf("%d\n",ans);
if(!flag) //从起始点到第一个被标记的点
{
flag=;
ans+=i-last;
lx=i;
rx=r[i]; //向右延伸
}
else if(rx<l[i])
{
// printf("%d %d\n",last,lx);
ans+=i-rx;
ans+=(rx-lx)*;
last=i;
lx=l[i];
rx=r[i];
}
else if(rx>l[i]&&rx<r[i]) //有交集 求出交集
{
rx=r[i];
}
}
//printf("%d %d %d\n",rx,lx,last);
ans+=(n+-rx);
ans+=*(rx-lx);
printf("%d\n",ans);
}
return ;
}

csu - 1538: Shopping (贪心)的更多相关文章

  1. Codeforces Gym 100803C Shopping 贪心

    Shopping 题目连接: http://codeforces.com/gym/100803/attachments Description Your friend will enjoy shopp ...

  2. [csu/coj 1083]贪心

    题意:给定n个线段,问能不能把x,y,z个长度为1,2,3的线段不重合地放进去. 思路:首先如果n个线段长度比要放的长度之和小,则无解,否则先考虑放2和3,如果2和3放下了1肯定可以放下(这是显然的) ...

  3. UVaLive 6834 Shopping (贪心)

    题意:给定 n 个商店,然后有 m个限制,去 c 之前必须先去d,问你从0到n+1,最短路程是多少. 析:我们我们要到c,必须要先到d,那么举个例子,2 5, 3 7,如果我们先到5再到2,再到7再到 ...

  4. 牛客国庆集训派对Day3 Solution

    A    Knight 留坑. B    Tree 思路:两次树形DP,但是要考虑0没有逆元 可以用前缀后缀做 #include <bits/stdc++.h> using namespa ...

  5. 【贪心】CSU 1809 Parenthesis (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 题目大意: 给一个长度为N(N<=105)的合法括号序列.Q(Q<= ...

  6. ACM学习历程—CSU 1216 异或最大值(xor && 贪心 && 字典树)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1216 题目大意是给了n个数,然后取出两个数,使得xor值最大. 首先暴力枚举是C(n,  ...

  7. 贪心 UVALive 6834 Shopping

    题目传送门 /* 题意:有n个商店排成一条直线,有一些商店有先后顺序,问从0出发走到n+1最少的步数 贪心:对于区间被覆盖的点只进行一次计算,还有那些要往回走的区间步数*2,再加上原来最少要走n+1步 ...

  8. CSU 1859 Gone Fishing(贪心)

    Gone Fishing [题目链接]Gone Fishing [题目类型]贪心 &题解: 这题要先想到枚举走过的湖,之后才可以贪心,我就没想到这,就不知道怎么贪心 = = 之后在枚举每个湖的 ...

  9. csu 1749: Soldiers ' Training(贪心)

    1749: Soldiers ' Training Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 37  Solved: 18[Submit][Stat ...

随机推荐

  1. DEV—【GridControl添加按钮列】

    效果图 打开GridControl的Run Designer在左侧栏中找到: 添加一个ButtonEdit: 更改属性中的值:Caption为按钮上显示的Text:Kind为按钮的类型: 然后拖到最后 ...

  2. JDK集合框架--ArrayList

    ArrayList,从类名就可以看出来,这是由数组实现的List,即内部是用数组保存元素的有序集合.先看看主要的成员变量,比较简单: public class ArrayList<E> e ...

  3. CSS综合用法

    div 居中 {position: absolute; top: 50%; left: 50%; margin-top: -180px; margin-left: -160px;}

  4. 正则表达式 - IP地址、Mac地址、端口、经纬度、车牌号码校验

    IP地址验证:   /^(\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(\d|[1-9]\d|1\d{2}|2[0 ...

  5. .NET 使用 Highcharts生成扇形图 柱形图

    1.首先新建一个.NET网站,如图所示: 2.引用所需要的js类库,如下图 highcharts.js可以在网上搜索就可以找到下载了. 3.在Default.aspx页面引用js 4.在 body 下 ...

  6. ubuntu个人初始配置记录

    1.安装vim编辑器 sudo apt-get install vim vim-gnome. vim有vim(vim-basic),vim-tiny,vim-gnome(gvim)等多个版本,安装ub ...

  7. bat获取注册表值

    @echo off Setlocal enabledelayedexpansion for /f "skip=2 delims=: tokens=1,*" %%i in ('reg ...

  8. swift class type isa-swizzling

    class 是引用类型,生成的实例分布在 Heap(堆) 内存区域上,在 Stack(栈)只存放着一个指向堆中实例的指针.因为考虑到引用类型的动态性和 ARC 的原因,class 类型实例需要有一块单 ...

  9. Android学习——蓝牙通讯

    蓝牙蓝牙,是一种支持设备短距离通信(一般10m内,且无阻隔媒介)的无线电技术.能在包括移动电话.PDA.无线耳机.笔记本电脑等众多设备之间进行无线信息交换.利用“蓝牙”技术,能够有效的简化移动通信终端 ...

  10. 阿里云服务器基本搭建_错误1_Permission denied (publickey)

    首先 修改这两个密码 然后重启服务器就可以了