这一题有两个陷阱:

  1. 给出的起始点可能小于终点 ,所以必须要加个判断,让第二个数大于第一个数
  2. 区间算的时候,一定是奇数到偶数,才能做到真正的区间全覆盖。所以如果第二个数是奇数,要加一变为偶数;第一个数为偶数,要减一变为奇数

知识点:

  1. 这道题主要用到了imos算法。很好用的算法,详见:http://www.hankcs.com/program/algorithm/imos_method.html
  2. max_element()这个在 algorithm 的头文件里,非常好用,可以返回从begin到end这中间的最大值,作用区间是一个大的范围。
    注意区别 max(),max是返回a和b这两个数中最大值,作用区间是两个变量。
    详细区别请看:https://www.cnblogs.com/ChrisCoder/p/10171134.html
  3. 长时间没有练习了,导致犯了一个很低级的错误,数组的长度不是 sizeof(a),而是 sizeof(a)/sizeof(a[0]) 或者 sizeof(数组名)/sizeof(数组类型)
  4. 注意输入多组数据的时候,每次需要先把上组数据用到的变量或数据结构清空

方法一:

方法一的好处在于,时间复杂度低,是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算法)相关推荐

  1. poj 1083 Moving Tables

    题目 两种做法,开始用贪心做的,有种情况没考虑到,结果排序错了. 这个例子,感觉上有三个交点,以为是30,其实是20. 贪心代码: #include <iostream> #include ...

  2. POJ1083 Moving Tables

    1083:Moving Tables 题目分析:初看似乎像贪心算法中的活动安排问题,不同的是这里的所有活动(相当于搬桌子的距离)都需要安排. 有四种贪心策略:最短优先,最长优先,最早开始时间优先,最早 ...

  3. poj题目详细分类及算法推荐题目

    DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题  ...

  4. hdu 1050 Moving Tables

    Moving Tables Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Font: ...

  5. POJ - 1077 Eight(A∗算法)

    POJ - 1077 Eight(A∗算法) #include<iostream> #include<algorithm> #include<map> #inclu ...

  6. Moving Tables(贪心)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 原题: Moving Tables Time Limit: 2000/1000 MS (Java/O ...

  7. poj 3662 Telephone Lines spfa算法灵活运用

    意甲冠军: 到n节点无向图,它要求从一个线1至n路径.你可以让他们在k无条,的最大值.如今要求花费的最小值. 思路: 这道题能够首先想到二分枚举路径上的最大值,我认为用spfa更简洁一些.spfa的本 ...

  8. uva live 2326 - Moving Tables

    把房间号映射在一条坐标上,然后排序,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划, ............ 次数*1 ...

  9. * poj 1251 JungleRoad 最小生成树 Kruskal算法、Prim算法

    文章目录 Kruskal算法 模板:https://blog.csdn.net/Rain722/article/details/65642992 Prim算法 模板: poj 1251 JungleR ...

最新文章

  1. 搜索1008(二分)
  2. java 结构数据结构_Java 数据结构
  3. __add__,关于运算符重载(用户权限)
  4. 深度神经网络(DNN)的正则化
  5. nodemailer 附件_如何使用Nodemailer发送带有附件的电子邮件。 Node.js
  6. docker nginx配置_docker随手笔记第十二节 jenkins+docker+nginx+纯静态页面配置
  7. jq 多个div从右向左依次显示_jquery – Animate绝对div到左边:0然后到右边:0和循环...
  8. html解析器c#,C# HTML解析工具HtmlAgilityPack使用实例(一)
  9. (63)FPGA面试题-用verilog写一段代码,实现消除一个glitch(毛刺)(二)
  10. 苹果藏在 iOS 14.3 中的新算法被发现,CSAM 检测技术再遭抗议!
  11. 交通流预测python代码_Python 3 amp; Keras 实现基于神经网络的交通流预测
  12. java导出excel超出65536条处理
  13. [原] 让网页中的对话框不显示以前输入的信息
  14. 番茄助手 VS2015
  15. DDR3之带宽、位宽和频率使用(MIGIP核里面的时钟结构)
  16. Boundary loss for highly unbalanced segmentation
  17. 【图片新闻】美海军的下一艘战舰与“祖姆沃尔特”DDG-1000极其相似
  18. 解决VMware虚拟机中没有vmnet0的情况
  19. ArcMap常用1:地理配准(一张地图图片和gis地图的匹配)
  20. 客户端登录阿里云mysql数据库_Mysql数据库之数据库术语和客户端登陆

热门文章

  1. ZCMU 5260: 魔法咒语(贪心)
  2. SpringCloud01
  3. 小米网络信号测试软件,iQOO和小米9信号之争:多方位网络测试,最终由谁胜出?...
  4. mysql多表操作语句_MYSQL数据库语句之多表操作(三)
  5. Java知识点之关键字
  6. Python——文献翻译
  7. Oracle For Linux 恢复日记 霆智X8III
  8. 系统滴答定时器(systick)应用
  9. FreeRTOS实时操作系统(七)时间片调度及RTOS的滴答定时器
  10. Android培训班(44)