首页 > 其他分享 >HDOJ 2037

HDOJ 2037

时间:2024-03-14 15:01:35浏览次数:18  
标签:num hour int 2037 ++ program Ti HDOJ

今年暑假不AC

Problem Description
“今年暑假不AC?”
“是的。”
“那你干什么呢?”
“看世界杯呀,笨蛋!”
“@#$%^&*%…”

确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。
作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目)

Input
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。

Output
对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。

Sample Input
12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0

Sample Output
5

Author
lcy

解题思路
将区间从小到大排序,尽可能区间不重叠地贪心看

Source
ACM程序设计期末考试(2006/06/07)

AC

#include<stdio.h>
#include<algorithm>
#include<cstring>
using namespace std;
typedef struct program {
	int Ti_s;
	int Ti_e;
}program;
bool cmp(program a, program b) {
	return (a.Ti_e - a.Ti_s) < (b.Ti_e - b.Ti_s);
}
int main() {
	int n, p_num;
	program p[105];
	int hour[105];
	bool flag = true;
	while (scanf("%d", &n) != EOF && n != 0) {
		p_num = 0;
		memset(hour, 0, sizeof(hour));
		for (int i = 0; i < n; i++)
			scanf("%d %d", &p[i].Ti_s, &p[i].Ti_e);
		sort(p, p + n, cmp);
		for (int i = 0; i < n; i++) {
			flag = true;
			for (int j = p[i].Ti_s + 1; j < p[i].Ti_e; j++) {
				if (hour[j] == 1)
					flag = false;
			}
			if (flag == true) {
				p_num++;
				for (int j = p[i].Ti_s; j <= p[i].Ti_e; j++) {
					hour[j] = 1;
				}
			}
		}
		printf("%d\n", p_num);
	}
	return 0;
}

标签:num,hour,int,2037,++,program,Ti,HDOJ
From: https://blog.csdn.net/weixin_45778081/article/details/136710223

相关文章

  • 杭电ACM HDOJ 1039 Easier Done Than Said?
    EasierDoneThanSaid?TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):6387    AcceptedSubmission(s):3172ProblemDescriptionPasswordsecurityisatrickything.Usersprefersimplepas......
  • 【题解】HDOJ 7329 [2023杭电多校] Touhou Red Red Blue
    题目传送门:HDOJ7329[2023杭电多校]TouhouRedRedBlue题意有两个口袋(口袋容量为1,初始均为空),有若干个UFO按顺序来到你的面前,每个UFO有一个颜色(GRB),你可以选择扔掉它或者把它装进口袋中,如果口袋1空着必须装进口袋1;如果口袋都满了,算上面前的UFO共有三个,有如下三种情况:如......
  • 【树状数组】 HDOJ 3743 Frosh Week
    简单的树状数组求逆序数,不过要用到离散化。。。。刚开始没用离散化,就跪了。。#include<iostream>#include<sstream>#include<algorithm>#include<vector>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#in......
  • 【线段树】 HDOJ 4027 Can you answer these queries?
    想了好久的线段树,用到的思想好巧妙,因为最大是2的63次方,所以开了个6,7次的平方就全变成一了。。。。比较好写的一种方法是直接用不加lazy的线段树更新区间,然后加一个当sum=R-L+1就不更新的剪枝。。。。我的代码是每加一次开根就pushdown,达到7次以后就不更新了。。。#include<iost......
  • 【线段树】 HDOJ 3308 LCIS
    要保存很多信息的线段树,我写的线段树保存了超多的信息,而且pushup写了两遍。。。。有一种比较简单的方法是直接放弃结构体,用数组保存区间的一个端点和区间长度,因为区间长度需要用到很多次,如果选择保存区间的两个端点,那么代码会写的很长很难受。。。。我就是用结构题写的,保存的是区间......
  • 【线段树】 HDOJ 5274 Dylans loves tree
    用dfs序构建线段树,然后用lca求出两点间路径的xor和。。。#include<iostream>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#include<cstdio>#include<algorithm>#include<cstring>#include......
  • HDOJ 5252 追星族
    对于n个点,先按时间排序。二分答案,对于二分的当前值dis,我们将每个点向外扩展dis个距离,也就是个正方形。这个点和前一个时间点差的时间d也作为前一个距离,向外扩展d。。。。求交以后存在矩形,那么二分当前值存在,否则不存在。。。。#include<iostream>#include<queue>#include<stac......
  • 【高斯消元】 HDOJ 5257 翻转游戏
    如果第一行的状态确定了,那么矩阵的所有状态也会随之确定。。。那么我们就将第一行写成变量,这样能够推出矩阵的m个方程。。。然后对于k,可以写出k个限制方程。。因此我们总共列出m+k个方程,高斯消元,bitset优化即可。。。#include<iostream>#include<queue>#include<stack>#inclu......
  • 【并查集】 HDOJ 4786 Fibonacci Tree
    就是求出搞成最小生成树的最少白边和最多白边的数量。。。。#include<iostream>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#include<cstdio>#include<algorithm>#include<cstring>#include<......
  • HDOJ 5296 Annoying problem
    根据每次的加点删点求对答案的贡献。。。#include<iostream>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#include<cstdio>#include<algorithm>#include<cstring>#include<climits&g......