试题 算法训练 Beaver’s Calculator

问题描述
  从万能词典来的聪明的海狸已经使我们惊讶了一次。他开发了一种新的计算器,他将此命名为"Beaver’s Calculator 1.0"。它非常特别,并且被计划使用在各种各样的科学问题中。
  为了测试它,聪明的海狸邀请了n位科学家,编号从1到n。第i位科学家给这个计算器带来了 ki个计算题。第i个科学家带来的问题编号1到n,并且它们必须按照编号一个一个计算,因为对于每个问题的计算都必须依赖前一个问题的计算结果。
  每个教授的每个问题都用一个数 ai, j  来描述,i(1≤i≤n)是科学家的编号,j(1≤j≤ ki )是问题的编号, ai, j  表示解决这个问题所需资源单位的数量。
  这个计算器非常不凡。它一个接一个的解决问题。在一个问题解决后,并且在下一个问题被计算前,计算器分配或解放资源。
  计算器中最昂贵的操作是解放资源,解放远远慢于分配。所以对计算器而言,每一个接下来的问题所需的资源不少于前一个,是非常重要的。
  给你关于这些科学家所给问题的相关信息。你需要给这些问题安排一个顺序,使得“坏对”尽可能少。
  所谓“坏对”,就是相邻两个问题中,后一个问题需求的资源比前一个问题少。别忘了,对于同一个科学家给出的问题,计算它们的相对顺序必须是固定的。
输入格式
  第一行包含一个整数n,表示科学家的人数。接下来n行每行有5个整数,ki, ai, 1, xi, yi, mi (0 ≤ ai, 1 < mi ≤ 109, 1 ≤ xi, yi ≤ 109) ,分别表示第i个科学家的问题个数,第1个问题所需资源单位数,以及3个用来计算 ai, j 的参量。ai, j = (ai, j - 1 * xi + yi)mod mi。
输出格式
  第一行输出一个整数,表示最优顺序下最少的“坏对”个数。
  如果问题的总个数不超过200000,接下来输出 行,表示解决问题的最优顺序。每一行两个用空格隔开的整数,表示这个问题所需的资源单位数和提供这个问题的科学家的编号。
样例输入
2
2 1 1 1 10
2 3 1 1 10
样例输出
0
1 1
2 1
3 2
4 2
数据规模和约定
  20%的数据 n = 2, 1 ≤ ki ≤ 2000;
  另外30%的数据 n = 2, 1 ≤ ki ≤ 200000;
  剩下50%的数据 1 ≤ n ≤ 5000, 1 ≤ ki ≤ 5000。

import java.io.*;class Expert{int indexOfProblem;int numOfProblem;long[] problem;  // 存放每个问题所消耗的资源数
}public class Main{static Expert[] experts;public static void merge(int start,int end,long[][] ans) {int mid = (start+end)>>1;int i = start;int j = mid+1;int k = 0;long[][] temp = new long[end-start+1][2];while(i <= mid && j <= end) {if(ans[i][0] > ans[j][0]) {temp[k][0] = ans[j][0];temp[k++][1] = ans[j++][1];}else {temp[k][0] = ans[i][0];temp[k++][1] = ans[i++][1];}}while(i <= mid) {temp[k][0] = ans[i][0];temp[k++][1] = ans[i++][1];}while(j <= end) {temp[k][0] = ans[j][0];temp[k++][1] = ans[j++][1];}for( i = 0 ; i < k; i++) {ans[i+start][0] = temp[i][0];ans[i+start][1] = temp[i][1]; }}public static void mergeSort(int start,int end, long[][] ans) {if(start < end) {int mid = (start + end)>>1;mergeSort(start, mid, ans);mergeSort(mid+1, end, ans);merge(start, end, ans);}}public static void main(String[] args) throws IOException{StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));in.nextToken();int n = (int)in.nval;long numOfAllProblems = 0;long maxBad = -1;experts = new Expert[n];for(int i = 0 ; i < n ; i++) {experts[i] = new Expert();}for(int i = 0 ; i < n; i++) {long oneBad = 0;in.nextToken();experts[i].numOfProblem = (int)in.nval;numOfAllProblems += (int)in.nval;experts[i].problem = new long[(int)in.nval+1];experts[i].problem[0] = -1;experts[i].indexOfProblem = 1;long firstProblem, xi, yi, mi;in.nextToken();firstProblem = (long)in.nval;in.nextToken();xi = (long)in.nval;in.nextToken();yi = (long)in.nval;in.nextToken();mi = (long)in.nval;experts[i].problem[1] = firstProblem;for(int j = 2 ; j <= experts[i].numOfProblem ; j++) {experts[i].problem[j] = (experts[i].problem[j-1] * xi + yi) % mi; if(experts[i].problem[j] < experts[i].problem[j-1]) {oneBad++;}}if(oneBad > maxBad) {maxBad = oneBad;}}out.println(maxBad);out.flush();if(numOfAllProblems <= 200000) {long[][] ans = new long[(int) numOfAllProblems][2];int start = 0, end = 0;while(end < numOfAllProblems) {for(int i = 0 ; i < n; i++) {int j;for(j = experts[i].indexOfProblem ; j <= experts[i].numOfProblem; j++) {if(j != experts[i].indexOfProblem && (experts[i].problem[j] < experts[i].problem[j-1])) {experts[i].indexOfProblem = j;break;}ans[end][1] = i;ans[end++][0] = experts[i].problem[j];}if(j > experts[i].numOfProblem) {experts[i].indexOfProblem = j;}}mergeSort(start, end-1, ans);start = end;}for(int i = 0 ; i < numOfAllProblems; i++) {out.println(ans[i][0] + " " + (ans[i][1]+1));out.flush();}}}
}

Java实现 蓝桥杯 算法训练 Beaver's Calculator相关推荐

  1. 蓝桥杯 算法训练 Beaver's Calculator

    蓝桥杯 算法训练 Beaver's Calculator 问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator ...

  2. 蓝桥杯- 算法训练-Beaver's Calculator

                                                             算法训练 Beaver's Calculator 时间限制:3.0s   内存限制:2 ...

  3. Java实现 蓝桥杯 算法训练 删除数组零元素

    算法训练 删除数组零元素 时间限制:1.0s 内存限制:512.0MB 提交此题 从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移 ...

  4. Java实现 蓝桥杯 算法训练 Balloons in a Box

    试题 算法训练 Balloons in a Box 问题描述 你要写一个程序,使得能够模拟在长方体的盒子里放置球形的气球. 接下来是模拟的方案.假设你已知一个长方体的盒子和一个点集.每一个点代表一个可 ...

  5. Java实现 蓝桥杯 算法训练 相邻数对(暴力)

    试题 算法训练 相邻数对 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 ...

  6. Java实现 蓝桥杯 算法训练 未名湖边的烦恼

    算法训练 未名湖边的烦恼 时间限制:1.0s 内存限制:256.0MB 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. ...

  7. Java实现 蓝桥杯 算法训练 天数计算

    试题 算法训练 天数计算 问题描述 编写函数求某年某月某日(**** ** **)是这一年的第几天 .提示:要考虑闰年,闰年的2月是29天(闰年的条件:是4的倍数但不是100的倍数,或者是400的倍数 ...

  8. Java实现 蓝桥杯 算法训练 Cowboys

    试题 算法训练 Cowboys 问题描述 一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人.正如很多西部片那样,在这一 ...

  9. Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算

    问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

最新文章

  1. mysql go命令行_Go语言调用mysql.exe和mysqldump命令行导入导出数据库
  2. 比较常规治疗登记中阿巴西谱、阿达木单抗、依那西普和英夫利昔单抗治疗类风湿关节炎的疗效和起效时间...
  3. python flask 大文件 下载_flask - python上传大文件到服务器报错
  4. 解决Winform程序在不同分辨率系统下界面混乱问题
  5. 985毕业+数据分析师+做过名企项目+懂运营=跳槽失败???
  6. LeetCode167 | Two Sum II - Input array is sorted (Easy)
  7. SAP License:新总帐行项目无法显示
  8. python print 换行_和我一起学Python?第1讲——Print()函数
  9. Amazon SP API注册申请和授权
  10. UTM投影与高斯克吕格投影中分带带号与中央经线经度的计算关系
  11. 计算机组成原理——补码一位乘(Booth算法)+举例+小白理解
  12. Python tolist()用法
  13. opencv 修改图片尺寸
  14. 计算机三维成像在哪些领域有运用,【图】三维动画类别及运用领域,三维动画分类介绍...
  15. 安装好office套件以后,右键新建中没有Word、Excel、PPT等怎么办
  16. 北风设计模式课程---里氏代换原则
  17. 3GPP TS 23501-g51 中英文对照 | 4.3.2 Roaming architecture
  18. K8s、Docker、CRI、OCI 之间的爱恨情仇
  19. 多线程总结:1.线程的创建于开启 2.线程的状态 3.线程安全
  20. 在进销存管理中经常提到红冲,那什么是红冲呢?

热门文章

  1. 2021全球程序员收入报告出炉,字节高级码农年薪274万元排第5!
  2. java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener
  3. 《当下的启蒙》的概述和精华
  4. 计算机系统的性能建模与设计 排队论实战,计算机系统的性能建模与设计:排队论实战(计算机科学丛书)...
  5. python获取发送到手机的短信,使用python将短信更新发送到手机
  6. android TextView 中划线、下划线 跑马灯
  7. 「python自学建议贴」Python学习路线+视频教程完整版
  8. 频率换算:模拟频率、模拟角频率、数字频率
  9. 用Redis存取两个人的共同好友名单
  10. 第二届童装品牌团2015年春夏联展