参考文章1
参考文章2

问题描述
  
  从万能词典来的聪明的海狸已经使我们惊讶了一次。他开发了一种新的计算器,他将此命名为"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,  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。

解题思路
由于顺序不可逆,每个科学家的最小“坏对”是确定的,将所有科学家的“坏对”记为 t,找出所有科学家中坏对最多的一个科学家,坏对最多的科学家的坏对数max就为最优值。 我们可以将“坏对”较少的科学家的问题往最多的科学家的问题中插入即可。

证明:
n个坏对就意味着可以把一个科学家所有的问题分成n+1个有序序列。
例如:3 4 5 2 6 8 7 坏对数为2,那么可分为 (3 4 5)(2 6 8)(7)三个有序序列, 即三块,块号为 0 1 2;
5 6 3 5 8 7 2 坏对数为3, 那么可分为 (5 6)(3 5 8)(7)(2)四个有序序列 ,即4块,块号为0 1 2 3;
我们同样可以把其余科学家的问题分为相应块数,那么我们把每个科学家对应相同块号的有序序列进行合并(不能改变每个科学家问题的顺序)。
因为本来每个序列就都是有序的,所有合并后的有序序列没有坏对,那么全部合并后,坏对数就为max。
以上面数据为例进行合并(3 4 5 5 6)(2 3 5 6 8 8)(7 7)(2 ) 坏对数为3。
因为每个科学家的问题顺序不能改变,那么最优值一定大于等于max,所以max一定为最优解

注意: long long

代码实现

#include<iostream>
#include<algorithm>
#include<math>
using namespace std;struct pro{ // 问题 int t; // 坏对的数量 int value; // 资源  int sci; // 科学家 bool operator <(const pro &A)const{ // 关键的比较 if(t==A.t){return value<A.value||(value==A.value&&sci<A.sci);}return t<A.t;    }
}p[200001];int main()
{long long int n,k,a,b,x,y,m;int cnt=0,num=-1;cin>>n;for(int i=1;i<=n;i++){ // n个科学家 int t=0; // 编号 cin>>k>>a>>x>>y>>m;for(int j=1;j<=k;j++){ // k个问题 if(cnt<=2e5)p[cnt++]=(pro){t,a,i}; // cnt记录总的问题个数 b=(x*a+y)%m; // 求得下一次资源 if(b<a&&j!=k) t++; // 记录坏对的数量 a=b;}num=max(num,t); // num为坏对的数量 }cout<<num<<endl; if(cnt<=2e5){sort(p,p+cnt); // 对所有问题进行排序 for(int i=0;i<cnt;i++){cout<<p[i].value<<" "<<p[i].sci<<endl;}}return 0;
}

【蓝桥】算法训练 Beaver‘s Calculator(贪心)相关推荐

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

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

  2. Java实现 蓝桥杯 算法训练 Beaver's Calculator

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

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

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

  4. 算法训练 Beaver's Calculator (蓝桥杯)

    参考:http://blog.csdn.net/qq_35078631/article/details/58669520 问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器 ...

  5. 算法训练 Beaver's Calculator

    问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator 1.0".它非常特别,并且被计划使用在各种各样 ...

  6. 状态压缩初探(包含蓝桥算法训练 和为T,牛客 csl的校园卡)

    在做题的时候,内存总是限制着我们.如果有一些数据的状态需要你标记或者记录,数据很小都好解决,直接记录就行,但是如果数据过大,内存就会超限,又如何解决呢?这个时候就可以采用状态压缩. 状态压缩并不是指某 ...

  7. 蓝桥杯—ALGO-131 Beaver's Calculator

    问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator 1.0".它非常特别,并且被计划使用在各种各样 ...

  8. 蓝桥杯 ALGO-34算法训练 纪念品分组(贪心算法+排序)

    问题描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值 相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价 ...

  9. 蓝桥杯算法训练KAc给糖果贪心-python题解

    KAC给糖果(贪心) 问题描述 kAc有n堆糖果,每堆有A[i]个. kAc说你只能拿m次糖果,聪明的你当然想要拿最多的糖果来吃啦啦啦~ //第二天,kAc问你还想吃糖果么?(嘿嘿嘿)说着眼角路出奇怪 ...

最新文章

  1. java调用npoi_NPOI导出数据到Excel
  2. SylixOS移植时mk_time函数问题
  3. NTU 课程笔记 7454 GAN
  4. 神策数据面向互联网金融企业提供行业解决方案
  5. qt linux 鼠标事件,QT学习笔记5:QMouseEvent鼠标事件简介
  6. Spring MVC:带有CNVR卷的REST应用程序。 1个
  7. 教你用Python抓取百度翻译
  8. Git笔记(16) 变基
  9. rails提供的validators
  10. python增强运算符_Python学习【第3篇】:Python之运算符
  11. 干货 | PyTorch常用代码段整理合集
  12. TortoiseGit-创建分支、合并分支
  13. socat使用指南:3:5种常见的使用方法
  14. 腾讯云服务器安全组8080端口开放教程
  15. 一个完整的计算机系统就是指什么,一个完整的计算机系统的组成部分的确切提法应该是什么...
  16. FileNotFoundException报错, src\main\....\....(拒绝访问) , 原因:1. 方法没有判断文件夹和文件, 2.没有指明文件的具体路径和名字...
  17. C语言SVPWM代码与软件测试
  18. 分享几个实用的Chrome扩展程序
  19. win 10 安装时候无法格式化分区,错误 0x80070057
  20. 基于微信小程序的电影订票系统设计与实现(代码+数据库+论文)

热门文章

  1. Curator的基本使用
  2. 多多情报通:拼多多什么软件可以看到大数据?拼多多大数据分析软件有哪些?
  3. 累了、倦了、撑不下去了,静下心来看一看
  4. SAP FICO OAYZ配置定义资产分类中的折旧范围时,无法填写默认折旧年度和期间
  5. 试算平衡表示例图_案例十一试算平衡表
  6. 海南大学计算机学硕直博,24所不歧视本科出身的大学,没有“骚操作”,良心啊...
  7. 开发media play,realplayer,暴风影音 等主流播放器视频特效插件
  8. 《火焰纹章风花雪月》能力属性和战斗计算公式研究
  9. [Vjudge]卡片游戏
  10. 在阿里云申请个人免费SSL证书