POJ-1083 Moving Tables(imos算法)
这一题有两个陷阱:
- 给出的起始点可能小于终点 ,所以必须要加个判断,让第二个数大于第一个数
- 区间算的时候,一定是奇数到偶数,才能做到真正的区间全覆盖。所以如果第二个数是奇数,要加一变为偶数;第一个数为偶数,要减一变为奇数
知识点:
- 这道题主要用到了imos算法。很好用的算法,详见:http://www.hankcs.com/program/algorithm/imos_method.html
- max_element()这个在 algorithm 的头文件里,非常好用,可以返回从begin到end这中间的最大值,作用区间是一个大的范围。
注意区别 max(),max是返回a和b这两个数中最大值,作用区间是两个变量。
详细区别请看:https://www.cnblogs.com/ChrisCoder/p/10171134.html - 长时间没有练习了,导致犯了一个很低级的错误,数组的长度不是
sizeof(a)
,而是sizeof(a)/sizeof(a[0])
或者sizeof(数组名)/sizeof(数组类型)
- 注意输入多组数据的时候,每次需要先把上组数据用到的变量或数据结构清空
方法一:
方法一的好处在于,时间复杂度低,是O(n) (不考虑外层控制T,只考虑内层),但是牺牲了空间复杂度,用了双vector或者双数组或者结构体
#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;const int maxn = 405;int main()
{int T;int N;int a, b;int table[maxn];vector<int> numIn; // 用结构体也可以实现vector<int> numOut;/*const int maxn = 200;typedef struct member{int s;int j;}member;member num[maxn];*/cin >> T;while (T--) // 注意输入多组数据的时候,每次需要先把上组数据用到的变量或数据结构清空{cin >> N;numIn.clear();numOut.clear();memset(table, 0, sizeof(table));for (int i = 0; i < N; i++){cin >> a >> b;if (a > b)swap(a, b);if (a % 2 == 0)a = a - 1;if (b % 2 == 1)b = b + 1;numIn.push_back(a);numOut.push_back(b);}for (int i = 0; i < numIn.size(); i++){table[numIn[i]]++;table[numOut[i]]--;}for (int i = 1; i < maxn; i++) // 可不是 sizeof(table){table[i] += table[i - 1];}int sum = *max_element(table, table + maxn);cout << sum*10 << endl;}
}
方法二:
方法二的好处在于,空间复杂度低,没有用到额外的数据结构,但是时间复杂度高,是O(n^2) (不考虑外层控制T,只考虑内层)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#define mem(a) memset(a,0,sizeof(a))
using namespace std;
const int maxn=400+10;
const int inf=0xffffff;
int t[maxn];
int main()
{int T,n,a,b;cin>>T;while(T--){scanf("%d",&n);mem(t);int ma=-inf;for(int i=0;i<n;i++){scanf("%d%d",&a,&b);if(a>b) swap(a,b);if(a%2==0) a--;if(b%2==1) b++;for(int j=a;j<=b;j++)t[j]++;}for(int i=1;i<=400;i++){ma=max(ma,t[i]);}cout<<10*ma<<endl;}return 0;
}
POJ-1083 Moving Tables(imos算法)相关推荐
- poj 1083 Moving Tables
题目 两种做法,开始用贪心做的,有种情况没考虑到,结果排序错了. 这个例子,感觉上有三个交点,以为是30,其实是20. 贪心代码: #include <iostream> #include ...
- POJ1083 Moving Tables
1083:Moving Tables 题目分析:初看似乎像贪心算法中的活动安排问题,不同的是这里的所有活动(相当于搬桌子的距离)都需要安排. 有四种贪心策略:最短优先,最长优先,最早开始时间优先,最早 ...
- poj题目详细分类及算法推荐题目
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar Game 简单题 ...
- hdu 1050 Moving Tables
Moving Tables Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Font: ...
- POJ - 1077 Eight(A∗算法)
POJ - 1077 Eight(A∗算法) #include<iostream> #include<algorithm> #include<map> #inclu ...
- Moving Tables(贪心)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 原题: Moving Tables Time Limit: 2000/1000 MS (Java/O ...
- poj 3662 Telephone Lines spfa算法灵活运用
意甲冠军: 到n节点无向图,它要求从一个线1至n路径.你可以让他们在k无条,的最大值.如今要求花费的最小值. 思路: 这道题能够首先想到二分枚举路径上的最大值,我认为用spfa更简洁一些.spfa的本 ...
- uva live 2326 - Moving Tables
把房间号映射在一条坐标上,然后排序,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划, ............ 次数*1 ...
- * poj 1251 JungleRoad 最小生成树 Kruskal算法、Prim算法
文章目录 Kruskal算法 模板:https://blog.csdn.net/Rain722/article/details/65642992 Prim算法 模板: poj 1251 JungleR ...
最新文章
- 搜索1008(二分)
- java 结构数据结构_Java 数据结构
- __add__,关于运算符重载(用户权限)
- 深度神经网络(DNN)的正则化
- nodemailer 附件_如何使用Nodemailer发送带有附件的电子邮件。 Node.js
- docker nginx配置_docker随手笔记第十二节 jenkins+docker+nginx+纯静态页面配置
- jq 多个div从右向左依次显示_jquery – Animate绝对div到左边:0然后到右边:0和循环...
- html解析器c#,C# HTML解析工具HtmlAgilityPack使用实例(一)
- (63)FPGA面试题-用verilog写一段代码,实现消除一个glitch(毛刺)(二)
- 苹果藏在 iOS 14.3 中的新算法被发现,CSAM 检测技术再遭抗议!
- 交通流预测python代码_Python 3 amp; Keras 实现基于神经网络的交通流预测
- java导出excel超出65536条处理
- [原] 让网页中的对话框不显示以前输入的信息
- 番茄助手 VS2015
- DDR3之带宽、位宽和频率使用(MIGIP核里面的时钟结构)
- Boundary loss for highly unbalanced segmentation
- 【图片新闻】美海军的下一艘战舰与“祖姆沃尔特”DDG-1000极其相似
- 解决VMware虚拟机中没有vmnet0的情况
- ArcMap常用1:地理配准(一张地图图片和gis地图的匹配)
- 客户端登录阿里云mysql数据库_Mysql数据库之数据库术语和客户端登陆
热门文章
- ZCMU 5260: 魔法咒语(贪心)
- SpringCloud01
- 小米网络信号测试软件,iQOO和小米9信号之争:多方位网络测试,最终由谁胜出?...
- mysql多表操作语句_MYSQL数据库语句之多表操作(三)
- Java知识点之关键字
- Python——文献翻译
- Oracle For Linux 恢复日记 霆智X8III
- 系统滴答定时器(systick)应用
- FreeRTOS实时操作系统(七)时间片调度及RTOS的滴答定时器
- Android培训班(44)