题目大意:有一些广告牌,为了使跑步者看到固定数量的广告,设计所需租用的最少数量的广告牌。

  其实就是区间选点问题:数轴上有n个区间[ai, bi],取尽量少的点,使得每一个区间都至少有一个点。首先对区间进行排序(按b从小到大的顺序,若b相同则按a从大到小的顺序),然后做出贪心选择:选取第一区间最后一个位置的点,然后逐个区间判断,若已经有点则无需处理,没有点的话选择该区间最后位置的点。本题则是变为k个点,道理是相同的,从后往前进行选点就可以了。

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 1000+10 struct Interval
{
int l, r;
bool operator < (const Interval& x) const
{
if (r != x.r) return r < x.r;
else return l > x.l;
}
};
Interval interval[MAXN];
bool payed[+]; int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int T;
scanf("%d", &T);
while (T--)
{
int k, n;
scanf("%d%d", &k, &n);
for (int i = ; i < n; i++)
{
int x, y;
scanf("%d%d", &x, &y);
interval[i].l = min(x, y);
interval[i].r = max(x, y);
}
sort(interval, interval+n);
memset(payed, , sizeof(payed));
int ans = ;
for (int i = ; i < n; i++)
{
int len = interval[i].r - interval[i].l + ;
if (len < k)
{
for (int j = interval[i].l; j <= interval[i].r; j++)
if (payed[+j] == false)
{
payed[+j] = true;
ans++;
}
}
else
{
int cnt = ;
for (int j = interval[i].l; j <= interval[i].r; j++)
if (payed[+j]) cnt++;
if (cnt < k)
{
int remain = k - cnt;
int p = interval[i].r;
while (p >= interval[i].l && remain > )
{
if (payed[+p] == false)
{
payed[+p] = true;
ans++;
remain --;
}
p--;
}
}
}
}
printf("%d\n", ans);
for (int i = ; i < ; i++)
if (payed[i]) printf("%d\n", i-);
if (T) printf("\n");
}
return ;
}

UVa 10148 - Advertisement的更多相关文章

  1. 【区间选点问题】uva 10148 - Advertisement

    区间选点问题,即数轴上有n个闭区间[l1i, ri],取尽量少的点,使得每个区间内都至少有一个点. The Department of Recreation has decided that it m ...

  2. <算法竞赛入门经典> 第8章 贪心+递归+分治总结

    虽然都是算法基础,不过做了之后还是感觉有长进的,前期基础不打好后面学得很艰难的,现在才慢慢明白这个道理. 闲话少说,上VOJ上的专题训练吧:http://acm.hust.edu.cn/vjudge/ ...

  3. UVA题目分类

    题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...

  4. UVA 11983 Weird Advertisement(线段树求矩形并的面积)

    UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...

  5. uva 11983 Weird Advertisement 扫描线

    Weird Advertisement Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/probl ...

  6. UVA 11983 Weird Advertisement --线段树求矩形问题

    题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和. 解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt] ...

  7. UVA 11983 Weird Advertisement

    题意:求矩形覆盖k次以上的区域总面积. 因为k≤10,可以在线段树上维护覆盖次数为0,...,k, ≥k的长度数量. 然后就是一个离散化以后扫描线的问题了. 离散化用的是半开半闭区间,以方便表示没有被 ...

  8. 尽量不要用ad,adv···,advertisement 这些关键词命名

    html dom,文件夹名称,文件名称·······,都尽量不用ad,adv···,advertisement  这些关键词! 为嘛呢? 因为会被浏览器的广告插件自动给屏蔽掉. 我的网站中有一个广告管 ...

  9. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

随机推荐

  1. English--Computer System

    A: Hey, Bill, Can you tell what's wrong with my computer? I can't move the mouse, I can's user the k ...

  2. SPFA中 正逆邻接表的建立

    正邻接表的建立: 先定义一个结构体: struct node { int r,v,w,next; }Map[]; 每输入一组数据 就通过Add函数加入到邻接表中,上图已经说得很明白了,结合着下面的代码 ...

  3. 安卓EditText按钮

    main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  4. HDU 5522 Numbers

    水题 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> us ...

  5. Android提高第十二篇之蓝牙传感应用

        请问淘宝上买的单片机蓝牙模块与安卓/android手机通讯的时候需要设置UUID吗? 2013-02-15 09:39 在世张辽 | 浏览 2769 次 想用安卓手机和单片机通过蓝牙模块通讯, ...

  6. phpstorm 格式化代码方法

    hpstorm 代码格式化方法: 快捷键:Ctrl + Alt + L 设置代码样式:File -> Settings -> Code Style ->PHP 根据个人php代码规范 ...

  7. 最后的配置部分:LNMP+Tomcat

    Nginx与PHP部分 mkdir /www/php -p echo -e "<?php\n\tphpinfo();\n?>" > /www/php/index. ...

  8. CentOS新增开机启动项

    编辑rc.local文件 vi /etc/rc.d/rc.local 例如 #!/bin/sh # # This script will be executed *after* all the oth ...

  9. 基于心跳的socket长连接

    http://coach.iteye.com/blog/2024444 基于心跳的socket长连接 博客分类: http socket 案例: 心跳: socket模拟网页的报文连接某个网站,创建t ...

  10. C#设置word段落首行缩进为0

    PublicVar.m_WordApp.Selection.ParagraphFormat.CharacterUnitFirstLineIndent = ; PublicVar.m_WordApp.S ...