算法训练 会议中心
时间限制:2.0s 内存限制:512.0MB
  会议中心  Siruseri政府建造了一座新的会议中心。许多公司对租借会议中心的会堂很感兴趣,他们希望能够在里面举行会议。
  对于一个客户而言,仅当在开会时能够独自占用整个会堂,他才会租借会堂。会议中心的销售主管认为:最好的策略应该是将会堂租借给尽可能多的客户。显然,有可能存在不止一种满足要求的策略。
  例如下面的例子。总共有4个公司。他们对租借会堂发出了请求,并提出了他们所需占用会堂的起止日期(如下表所示)。

上例中,最多将会堂租借给两家公司。租借策略分别是租给公司1和公司3,或是公司2和公司3,也可以是公司1和公司4。注意会议中心一天最多租借给一个公司,所以公司1和公司2不能同时租借会议中心,因为他们在第九天重合了。
  销售主管为了公平起见,决定按照如下的程序来确定选择何种租借策略:首先,将租借给客户数量最多的策略作为候选,将所有的公司按照他们发出请求的顺序编号。对于候选策略,将策略中的每家公司的编号按升序排列。最后,选出其中字典序最小[1]的候选策略作为最终的策略。
  例中,会堂最终将被租借给公司1和公司3:3个候选策略是{(1,3),(2,3),(1,4)}。而在字典序中(1,3)<(1,4)<(2,3)。
  你的任务是帮助销售主管确定应该将会堂租借给哪些公司。
输入格式
  输入的第一行有一个整数N,表示发出租借会堂申请的公司的个数。第2到第N+1行每行有2个整数。第i+1行的整数表示第i家公司申请租借的起始和终止日期。对于每个公司的申请,起始日期为不小于1的整数,终止日期为不大于109的整数。
输出格式
  输出的第一行应有一个整数M,表示最多可以租借给多少家公司。第二行应列出M个数,表示最终将会堂租借给哪些公司。
数据规模和约定
  对于50%的输入,N≤3000。在所有输入中,N≤200000。
样例输入
4
4 9
9 11
13 19
10 17
样例输出
2
1 3

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class 会议中心 {static int[] sqqs,sqzz,sqsx,sqcf,cxz,finz;static int[][] dgb;static int n=0,fin=0,max=0;public static void main(String[] args)throws IOException {  BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));String s=reader.readLine();n=Integer.parseInt(s);sqqs=new int[n+1];sqzz=new int[n+1];sqcf=new int[n+1];for(int i=1;i<=n;i++){s=reader.readLine();String[] sa = s.split(" ");sqqs[i]=Integer.parseInt(sa[0]);sqzz[i]=Integer.parseInt(sa[1]);if (max<sqzz[i]) max=sqzz[i];}sqsx=new int[max+1];for (int i=1;i<=n;i++){if (sqsx[sqzz[i]]==0){sqsx[sqzz[i]]=i;}else{if (sqqs[i]>sqqs[sqsx[sqzz[i]]]){    for (int j=1;j<=n;j++){if (sqcf[j]==0){sqcf[j]=sqsx[sqzz[i]];sqsx[sqzz[i]]=i;break;}}}}}dgb=new int[2][n+1];for (int i=1;i<=max;i++) {if (sqsx[i]!=0) {getcs(sqsx[i]);}}for (int i=1;i<=n;i++){if (fin<dgb[0][i]) fin=dgb[0][i];}for (int k=max;k>=1;k--){if (sqsx[k]==0) continue;int i=sqsx[k];if (dgb[0][i]==fin) continue;for (int j=sqzz[i]+1;j<=max;j++){if (j==max){dgb[0][i]=0;dgb[1][i]=0;continue;}if (sqsx[j]==0) continue;if (dgb[0][sqsx[j]]==0) continue;if ((dgb[0][sqsx[j]]==dgb[0][i]+1)&(sqqs[sqsx[j]]>sqzz[i])) break;if (dgb[0][sqsx[j]]>dgb[0][i]+1) {dgb[0][i]=0;dgb[1][i]=0;break;}}}for (int i=1;i<=n;i++) {if (sqcf[i]!=0) {getcs1(sqcf[i]);} else break;}cxz=new int[fin+1];finz=new int[fin+1];int xh=1;for (int i=1;i<=n;i++){if (dgb[0][i]==0) continue;if (cxz[dgb[0][i]]!=0) continue;if (fincheck(i)==1){finz[xh]=i;xh++;cxz[dgb[0][i]]=i;dealsq(i);}}System.out.println(fin);for (int i=1;i<=fin;i++){System.out.print(""+finz[i]+" ");}System.out.println();}
static void getcs(int a){int cs=0;for (int i=sqqs[a]-1;i>0;i--){if (sqsx[i]!=0){cs=dgb[0][sqsx[i]];if (cs!=0) {break;}}}for (int i=sqqs[a];i<sqzz[a];i++){if (sqsx[i]!=0){if (dgb[0][sqsx[i]]>cs+1) return;}}dgb[0][a]=cs+1;dgb[1][a]=1;
}
static void getcs1(int a){int cs=0;int b=dgb[0][sqsx[sqzz[a]]];if (b==0) return;for (int i=sqqs[a]-1;i>0;i--){if (sqsx[i]!=0){cs=dgb[0][sqsx[i]];if (cs!=0) {break;}}}if (cs+1<b) return;dgb[0][a]=cs+1;dgb[1][a]=1;
}
static int fincheck(int a){int[] lsst=new int[fin+1];int b=0,c=0,sc=0,ec=0;int cs=dgb[0][a];for (int i=cs-1;i>=1;i--){if (cxz[i]!=0) {b=cxz[i];sc=i;break;}}if (b!=0){lsst[sc]=sqzz[b];for (int i=sqzz[b]+1;i<sqqs[a];i++){if (sqsx[i]==0) continue;if (dgb[0][sqsx[i]]==0) continue;if (lsst[dgb[0][sqsx[i]]]!=0) continue;if (sqqs[sqsx[i]]<=lsst[dgb[0][sqsx[i]]-1]) continue;lsst[dgb[0][sqsx[i]]]=sqzz[sqsx[i]];}if (lsst[cs-1]==0) return 0;if (lsst[cs-1]>=sqqs[a]) return 0;}for (int i=cs+1;i<=fin;i++){if (cxz[i]!=0){c=cxz[i];ec=i;break;}}if (c!=0){lsst[ec]=sqqs[c];for (int i=sqqs[c]-1;i>sqzz[a];i--){if (sqsx[i]==0) continue;if (dgb[0][sqsx[i]]==0) continue;if (i>=lsst[dgb[0][sqsx[i]]+1]) continue;lsst[dgb[0][sqsx[i]]]=Math.max(sqqs[sqsx[i]],lsst[dgb[0][sqsx[i]]]);}if (lsst[cs+1]==0) return 0;if (lsst[cs+1]<=sqzz[a]) return 0;}return 1;
}
static void dealsq(int a){int cs=dgb[0][a];for (int i=sqzz[a]-1;i>=1;i--){if (sqsx[i]==0) continue;if (dgb[0][sqsx[i]]==0) continue;int dcs=dgb[0][sqsx[i]];if (dcs==cs) {dgb[0][sqsx[i]]=0;dgb[1][sqsx[i]]=0;continue;}if (dcs==cs-1) {if (i>=sqqs[a]) {dgb[0][sqsx[i]]=0;dgb[1][sqsx[i]]=0;continue;}}if (dcs==cs-2) break;}for (int i=sqzz[a]+1;i<=max;i++){if (sqsx[i]==0) continue;if (dgb[0][sqsx[i]]==0) continue;int dcs=dgb[0][sqsx[i]];if (dcs==cs) {dgb[0][sqsx[i]]=0;dgb[1][sqsx[i]]=0;continue;}if (dcs==cs+1) {if (sqzz[a]>=sqqs[sqsx[i]]) {dgb[0][sqsx[i]]=0;dgb[1][sqsx[i]]=0;continue;}}if (dcs==cs+2) break;}
}}

Java实现 蓝桥杯VIP 算法训练 会议中心相关推荐

  1. Java实现 蓝桥杯VIP 算法训练 无权最长链

    试题 算法训练 无权最长链 问题描述 给定一个n节点m边的无圈且连通的图,求直径 输入格式 第一行两个数字n,m 接下来m行每行两个数字x,y,代表x,y之间有一条边 输出格式 要求用户的输出满足的格 ...

  2. Java实现 蓝桥杯VIP 算法训练 步与血(递推 || DFS)

    试题 算法训练 步与血 问题描述 有n*n的方格,其中有m个障碍,第i个障碍会消耗你p[i]点血.初始你有C点血,你需要从(1,1)到(n,n),并保证血量大于0,求最小步数. 输入格式 第一行3个整 ...

  3. Java实现 蓝桥杯VIP 算法训练 采油区域

    算法训练 采油区域 时间限制:2.0s 内存限制:512.0MB 提交此题 查看参考代码 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整 ...

  4. Java实现蓝桥杯VIP算法训练 二元函数

    试题 算法训练 二元函数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值. 只有满足以下要求的表达式才是合法的: ...

  5. Java实现 蓝桥杯VIP 算法训练 删除多余括号

    算法训练 删除多余括号 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且 ...

  6. Java实现 蓝桥杯VIP 算法训练 JAM计数法

    题目描述 Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小 写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文 ...

  7. Java实现 蓝桥杯VIP 算法训练 学做菜

    算法训练 学做菜 时间限制:1.0s 内存限制:256.0MB 问题描述 涛涛立志要做新好青年,他最近在学做菜.由于技术还很生疏,他只会用鸡蛋,西红柿,鸡丁,辣酱这四种原料来做菜,我们给这四种原料标上 ...

  8. Java实现 蓝桥杯VIP 算法训练 sign函数

    试题 算法训练 sign函数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定实数x,输出sign(x)的值. sign(x)是符号函数,如果x>0,则返回1:如果x=0, ...

  9. Java实现 蓝桥杯VIP 算法训练 数对

    算法训练 数对 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,该程序从用户读入一个整数,然后列出所有的数对,每个数对的乘积即为该数. 输入格式:输入只有一行,即一个整数. 输出 ...

  10. Java实现 蓝桥杯VIP 算法训练 星际交流

    算法训练 星际交流 时间限制:1.0s 内存限制:256.0MB 问题描述 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法 ...

最新文章

  1. wcf系列学习5天速成——第四天 wcf之分布式架构(转载)
  2. java线程间的通讯
  3. c++职工管理系统主函数代码
  4. linux用户态驱动--IOMMU(三)
  5. [WPF]使用Fody提高效率
  6. 我的核心技术都是从哪里学到的?如何提高成长的?分享给大家。
  7. centos 6 x64 mysql_CentOS 6.x版本升级Mysql
  8. Java Web 学习与总结(一)Servlet基础
  9. __attribute__ 之weak,alias属性
  10. spring-boot-1.4x后@ConfigurationProperties注解舍弃location
  11. Softmax, DNN, WideDeep Model
  12. 福昕阅读器中批量删除注释
  13. 机器学习(四):决策树绘画(基础篇)
  14. 小i聊天机器人自定义应用
  15. Jekyll分页功能
  16. DevOps is dirty work - CI drives you crazy
  17. 怎么设置能在IIS6内设置显示错误信息?
  18. ArangoDB 多模型数据库概念
  19. 使用FrameWork发布IQD文件
  20. Mor.ai蓦然认知重磅推出智能家居IoT解决方案

热门文章

  1. 二进制编辑器BZ-1621网址
  2. c语言中自定义函数的流程图这么画,c语言流程图怎么画?
  3. 文件服务器 共享 端口,共享文件服务端口设置
  4. Axure RP 9 for mac 高保真原型图 - 案例18 【导航栏-展开、收起】导入元件库
  5. MemReduct内存自动清理工具
  6. 海康威视SDK基于JAVA二次开发
  7. tomcat历史版本新特性_Tomcat介绍(三)完结,即将进入正文
  8. 算法设计与分析(第2版)屈婉玲 刘田 张立昂 王捍贫编著 第五章课后习题答案
  9. java 读取读取配置文件
  10. 音视频 TS格式解析