hdu2037 今年暑假不AC
来源:互联网 发布:淘宝登陆页面异常 编辑:程序博客网 时间:2024/06/05 07:16
Problem Description
“今年暑假不AC?”
“是的。”
“那你干什么呢?”
“看世界杯呀,笨蛋!”
“@#$%^&*%...”
确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。
作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目)
“是的。”
“那你干什么呢?”
“看世界杯呀,笨蛋!”
“@#$%^&*%...”
确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。
作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目)
Input
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。
Output
对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。
Sample Input
121 33 40 73 815 1915 2010 158 186 125 104 142 90
Sample Output
5
题意:有n个电视节目,给出每个节目播放的开始时间和结束时间,求最多可以看多少个节目
思路:排序问题,将节目根据结束时间从小到大排列,刚开始选择第一个节目,然后每次选择与当前选择的节目不冲突的节目,统计选择的节目的数目,即可以看的节目的最大数
import java.io.FileInputStream;import java.io.OutputStreamWriter;import java.io.InputStreamReader;import java.io.PrintWriter;import java.util.Scanner;import java.util.Arrays;public class Main implements Runnable{ private static final boolean DEBUG = false; private Scanner cin; private PrintWriter cout; private int n; private static final int N = 101; private Program[] p = new Program[N]; class Program implements Comparable { int start, end; @Override public int compareTo(Object other) { Program b = (Program)other; if (end != b.end) return end - b.end; return start - b.start; } } private void init() { try { if (DEBUG) { cin = new Scanner(new InputStreamReader(new FileInputStream("f:\\OJ\\uva_in.txt"))); } else { cin = new Scanner(new InputStreamReader(System.in)); } cout = new PrintWriter(new OutputStreamWriter(System.out)); } catch (Exception e) { e.printStackTrace(); } } private boolean input() { n = cin.nextInt(); if (n == 0) return false; for (int i = 0; i < n; i++) { p[i] = new Program(); p[i].start = cin.nextInt(); p[i].end = cin.nextInt(); } return true; } private void solve() { Arrays.sort(p, 0, n); int start = p[0].end; int ans = 1; for (int i = 1; i < n;) { int j = i; while (j < n && p[j].start < start && p[j].end >= start) j++; i = j; if (j < n) { start = p[j].end; ans++; } i++; } cout.println(ans); cout.flush(); } @Override public void run() { init(); while (input()) { solve(); } } public static void main(String[] args) { // TODO code application logic here new Thread(new Main()).start(); }}
0 0
- HDU2037:今年暑假不AC
- hdu2037 今年暑假不AC
- HDU2037:今年暑假不AC
- hdu2037 今年暑假不ac
- hdu2037 今年暑假不AC
- hdu2037 今年暑假不AC
- hdu2037今年暑假不AC
- HDU2037 今年暑假不AC
- HDU2037 今年暑假不AC
- hdu2037 今年暑假不AC
- 今年暑假不AC--hdu2037
- HDU2037今年暑假不AC
- hdu2037今年暑假不AC
- HDU2037今年暑假不AC
- hdu2037 今年暑假不AC
- hdu2037今年暑假不AC
- HDU2037 今年暑假不AC
- HDU2037今年暑假不AC
- thinkphp 字段映射
- 如何做好网站开发项目的需求分析
- android 混淆工具(可直接拿来用或学习)
- wpa_cli commands verify
- C++流状态的查询和控制
- hdu2037 今年暑假不AC
- 透视投影
- 最大公约数和最小公倍数 UVa11388
- CSS里的 no-repeat 是什么意思
- 5 yii2.0面包屑的使用及启用中文
- 1013. Battle Over Cities (25)
- server 2003远程桌面只能连接两个客户端问题的解决方法
- Python网络爬虫的学习(1)URI与URL
- Echarts后台option对象