Problem 1004: 蛤玮打扫教室(区间覆盖端点记录)
Problem 1004: 蛤玮打扫教室
Time Limits: 1000 MS Memory Limits: 65536 KB
64-bit interger IO format: %lld Java class name: Main
Description
现在知道一共有n个机房,算上蛤玮一共有m个队员,教练做了m个签,每个签上写着两个数L,R(L<=R),抽到的人要把[L,R]的教室全部打扫一遍.由于蛤玮是队长而且他很懒,他通过某种交易提前知道了所有m个签上面写的是什么,而且通过某种魔法可以控制自己抽到哪个签.一个教室被打扫一次就干净了,所以蛤玮想知道自己抽哪些签可以不用打扫教室而且不会被教练发现,即他抽到的区间全都会被别人打扫一遍.
蛤玮被教练叫去打扫机房,集训队有很多机房,也有很多队员,现在他们要用抽签的方式决定谁打扫哪间教室.
Input
第一行为一个整数T(1<=T<=20),代表数据组数。每组数据第一行n,m(1<=n,m<=100000),接下来m行,每行两个数L,R(1<=L<=R<=n).
Output
每组数据输出一个k,表示多少个签符合蛤玮的要求,接下来一行输出k个数,这些签的编号,下标从1开始.
Sample Input
3 15 5 1 4 5 5 6 8 9 10 5 6 3 6 1 1 1 1 2 2 2 2 3 3 3 3 10 3 1 4 2 6 6 10
Output for Sample Input
2 2 5 6 1 2 3 4 5 6 0
Hint
Author
这题应该是线段树,但是没学过也感觉看不太懂,于是找了其他大牛题解的做法,还好这种做法容易懂些。
思路:在vis数组里对每一个区间的L与R操作,vis[L]++,vis[R+1]--,这样可以标记一个区间的端点,然后再用这个数组求一个前缀和放入per,每一项即是对应点的被覆盖次数,然后这样就稍微好办了点,转化为告诉你每一个点的覆盖次数,求是否题目中的抽签的区间是否全部都是至少被覆盖两次的点,然后再开一个cnt数组,记录连续完整覆盖的区间长度。最后比较每一个抽签R-L+1(区间长度)与cnt[R]-cnt[L-1](连续覆盖区间长度)是否相等即可。不愧是大牛想出来的办法。
代码:
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#define INF 0x3f3f3f3f
#define MM(x) memset(x,0,sizeof(x))
using namespace std;
typedef long long LL;
const int N=100010;
struct info
{int l;int r;
};
info point[N];//抽签信息记录
int vis[N];//端点标记
int cnt[N];//连续覆盖次数大于2区间
int ans[N];//记录答案
int per[N];//单点覆盖次数
int main(void)
{int tcase,i,j,L,R,x,y,z,n,m;scanf("%d",&tcase);while (tcase--){MM(point);MM(vis);MM(cnt);MM(ans);MM(per);scanf("%d%d",&n,&m);for (i=1; i<=m; i++){scanf("%d%d",&point[i].l,&point[i].r);vis[point[i].l]++;vis[point[i].r+1]--;}int temp=0;for (i=1; i<=n; i++){temp+=vis[i];per[i]=temp;}for (i=1; i<=n; i++){if(per[i]>=2)cnt[i]=cnt[i-1]+1;elsecnt[i]=0;//或cnt[i]=cnt[i-1]也可以,反正最后求的是差值}int k=0;for (i=1; i<=m; i++){int left=point[i].l;int righ=point[i].r;if(righ-left+1==cnt[righ]-cnt[left-1])ans[k++]=i;}printf("%d\n",k);for (i=0; i<k; i++)printf("%d%s",ans[i],i==k-1?"\n":" ");}return 0;
}
转载于:https://www.cnblogs.com/Blackops/p/5766340.html
Problem 1004: 蛤玮打扫教室(区间覆盖端点记录)相关推荐
- 蛤玮打扫教室(区间覆盖)
1877: 蛤玮打扫教室 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 332 Solved: 71 SubmitStatusWeb Board D ...
- “玲珑杯”郑州轻工业学院第八届ACM程序设计大赛Problem G: 蛤玮点菜
Problem G: 蛤玮点菜 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 320 Solved: 31 SubmitWeb Board Desc ...
- NBOJv2 Problem 1009 蛤玮的魔法(二分)
Problem 1009: 蛤玮的魔法 Time Limits: 1000 MS Memory Limits: 65536 KB 64-bit interger IO format: %ll ...
- BZOJ2298: [HAOI2011]problem a(带权区间覆盖DP)
Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1747 Solved: 876 [Submit][Status][Discuss] Descrip ...
- 高效算法——E - 贪心-- 区间覆盖
E - 贪心-- 区间覆盖 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/E 解题思路: 贪心思想, ...
- 【sdut 1751】 区间覆盖问题
区间覆盖问题 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 设x1 ...
- 区间覆盖全部类型及部分精选习题汇总详解(贪心策略)
内容如下: 1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2, ...
- sdut 区间覆盖问题
区间覆盖问题 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description 用i来表示x坐 ...
- ZZULI 1876: 蛤玮的项链 Hash + 二分
Time Limit: 6 Sec Memory Limit: 128 MB Submit: 153 Solved: 11 SubmitStatusWeb Board Description 蛤玮 ...
最新文章
- 003小插曲之变量和字符串
- 我的Android进阶之旅------gt;Java全角半角的转换方法
- linux php安装memcached扩展
- SAP CRM Product workflow debug
- java中的console是干什么的_[Java教程]javascript中,你真的会用console吗?
- linux服务器不会中毒,[转载]ubuntu 不会中毒的原因(转)
- Linux字符设备驱动剖析
- 工作流实战_11_flowable 流程实例 跟踪流程
- php伪静态限制网页播放视频,学习猿地-php伪静态后html不能访问怎么办
- 电信5g网络apn接入点_华为就5G网络设备禁令起诉瑞典邮政和电信管理局
- Apache使用总结
- 服务器雷达信号处理,雷达信号处理的信息几何方法
- Mac 输入法候选词框消失的解决方法
- 2021年美容师(初级)免费试题及美容师(初级)考试试卷
- google chrome
- vue组件可视化_Vue HTML5音频可视化组件
- ESP8266 系统环境搭建
- Xshell6 提示要使用此程序,您必须应用最新的更新或使用新版本
- mb63.net/ios.html,Document
- matlab地球公转,Unity模拟太阳地球月球公转自转
热门文章
- img标签前面加冒号:src和src的区别
- 什么是BFC?BFC的功能及其使用?
- 【AUTOSAR】【CAN通信】CanTp
- 数据推荐 | 人体行为识别数据集
- “羊了个羊”是如何吸引住你的
- 3d打印,机器人,计算机,3D打印的机器人将教孩子计算机编码!
- Nginx正向代理和反向代理配置
- 元学习—关系网络和匹配网络
- C语言中3种实用的输出格式:%md,%0md,%.mf
- 洛谷 P1914 小书童——凯撒密码 C/C++ 字符串