NYOJ-14-会场安排问题
2016-05-16 02:21
281 查看
描述
学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。
输入
第一行是一个整型数m(m<100)表示共有m组测试数据。
每组测试数据的第一行是一个整数n(1 < n < 10000)表示该测试数据共有n个活动。
随后的n行,每行有两个正整数Bi,Ei(0<=Bi,Ei<10000),分别表示第i个活动的起始与结束时间(Bi<=Ei)
输出
对于每一组输入,输出最多能够安排的活动数量。
每组的输出占一行
样例输入
2
2
1 10
10 11
3
1 10
10 11
11 20
样例输出
1
2
一道简单的区间问题,虽然问题核心很简单,但是不使用快排进行排序就会超时,如果是用C++写,那就会十分省事,但是如果用C写,就有一些小难了,毕竟需要写很长的快排代码……
代码(C):
学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。
输入
第一行是一个整型数m(m<100)表示共有m组测试数据。
每组测试数据的第一行是一个整数n(1 < n < 10000)表示该测试数据共有n个活动。
随后的n行,每行有两个正整数Bi,Ei(0<=Bi,Ei<10000),分别表示第i个活动的起始与结束时间(Bi<=Ei)
输出
对于每一组输入,输出最多能够安排的活动数量。
每组的输出占一行
样例输入
2
2
1 10
10 11
3
1 10
10 11
11 20
样例输出
1
2
一道简单的区间问题,虽然问题核心很简单,但是不使用快排进行排序就会超时,如果是用C++写,那就会十分省事,但是如果用C写,就有一些小难了,毕竟需要写很长的快排代码……
代码(C):
#include <stdio.h> #define MAXSIZE 10001 typedef struct { int Bi; int Ei; } Party; //交换L数组r的下标为i和j的值 void swap(Party *P, int i, int j) { int temp = P[i].Bi; P[i].Bi = P[j].Bi; P[j].Bi = temp; temp = P[i].Ei; P[i].Ei = P[j].Ei; P[j].Ei = temp; } //交换顺序表L中子表的记录,使枢轴记录到位,并返回其所在位置 //此时在它之前(后)的记录均不大于它 int Partition(Party *P, int low, int high) { int pivotkey; pivotkey = P[low].Ei; //用子表的第一个记录作枢轴记录 while (low < high) //从表的两端交替向中间扫描 { while (low < high && P[high].Ei >= pivotkey) { high--; } swap(P, low, high); //将比枢轴记录小的记录交换到低端 while (low < high && P[low].Ei <= pivotkey) { low++; } swap(P, low, high); //将比枢轴记录大的记录交换到高端 } return low; //返回枢轴所在位置 } //对顺序表L中的子序列L->r[low...high]作快速排序 void QSort(Party *L, int low, int high) { int pivot; if (low < high) { pivot = Partition(L, low, high); //将L->[low...high]一分为二,算出枢轴值pivot QSort(L, low, pivot - 1); //对低子表递归排序 QSort(L, pivot + 1, high); //对高子表递归排序 } } int main(int argc, const char * argv[]) { int m, n; Party P[MAXSIZE]; scanf("%d", &m); while (m--) { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d %d", &P[i].Bi, &P[i].Ei); } QSort(P, 1, n); int num = 1; int flagE = P[1].Ei; for (int i = 2; i <= n; i++) { if (P[i].Bi > flagE) { flagE = P[i].Ei; num++; } } printf("%d\n", num); } return 0; }
相关文章推荐
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener问题
- [Ruby笔记]2. ruby基础的基础: irb --simple-prompt / puts print p/ false nil
- Atom编辑器折腾记_(22)二次翻译快捷键【追加1.8新版本新增快捷键】
- Atom编辑器折腾记_(22)二次翻译快捷键【追加1.8新版本新增快捷键】
- 从源码分析IntentService
- 今天用intelliJ IDEA软件建Web Application遇到的java.lang.NoClassDefFoundError: com/google/gson/Gson
- 二叉树递归C实现
- [解决]java.io.IOException: Cannot obtain block length for LocatedBlock
- python学习笔记—使用dict和set
- 写一个属于自己的模板引擎【一】
- 2016"百度之星" - 资格赛(Astar Round1) Problem D 简单题
- python学习笔记—输入输出
- Python学习笔记—使用list和tuple
- VISIO标准图-TQM
- VISIO标准图-EPC
- Mina airQQ聊天 服务端篇(二)
- VISIO标准图-BPMN
- VISIO标准图-IDEF
- POJ 3686 The Windy's(拆点、最小权匹配)
- Python学习笔记—字符串和编码