二模 (10)day1
第一题:
题目描述:
一个阅览室每天都要接待大批读者。阅览室开门时间是0,关门时间是T。每位读者的到达时间都不一样,并且想要阅读的刊物不超过5本。每位读者心里对自己想看的刊物都有一个排位,到达之后他会先去找自己最想看的刊物,如果找不到则去找其次想看的刊物。如果找不到任何他想看的刊物,他会开始等待,直到有一本以上的他想看的刊物被人放回原处。当然,他会先去拿其中自己最想看的刊物。当他看完某一本刊物后,就把它放回原处,接着去找自己没看过的最想看的刊物。如此下去,直到看完所有他想看的刊物为止。矛盾出现在两个人同时想要拿同一本刊物的时候。阅览室为了避免读者之间出现争执,作了一个规定,读者每次在开始等待时先去服务台做一次登记。如果两个人都同时想要一本刊物,那么先登记的读者将得到这本刊物。如果两个人同时登记,那么先到达阅览室的读者将得到刊物。没得到的人就只能去找其他的刊物看。阅览室关门时,所有读者都将被强迫离开阅览室,不再允许继续阅读。
现在阅览室想做一个统计调查,你被要求写一个程序来模拟这个过程计算出所有刊物被阅读的总次数。当某个读者开始阅读某本刊物时,该刊物的被阅读次数就加1,无论这本刊物最后有没有被读完
解题过程:
1.蛋疼的模拟题,题目不大好理解,而且没有说明两个人同时到达且要同一本该怎么办(数据里没有这种情况)。
2.其实这题认真去写也不是那么恶心.主要是想明白如何处理 ”登记“操作. 我用了一个ok[i]数组,表示编号为i的书空闲下来是在什么时候。根据时间来模拟,如果当前时间有一个读者来了(arrive_time=cur_time),以此检查他能否找到一本可以看的书(ok[i]<=cur_time),把那本书的ok[i]加上一个他看书花掉的时间t,并可以假设那个人把书带回家看了,所以把那个人的到达时间arrive_time加上他看书花掉的时间t(可以想象成他把书带回家看了,看完了瞬间回到阅览室了)。
3.如果一个人找不到可以看得书,那么依次检查找到一本他还没看过的且ok值最小的书(假设编号为k),然后就可以想象成他先回家了,然后到时间ok[k]瞬间回来了,又把那本书带回家看了,所以ok[k]+=t . 这里要注意ans++的条件必须是未更新前的ok[k]<T。这样就完美地解决了冲突和登记的问题。
初始得分100.
第二题:
题目大意:floodfill 求出四联通块的个数和每个联通块的floodfill时间。
解题过程:
1.直接BFS实现floodfill即可。题目没说清楚被坑了一次,题目的本意是从最左边的一列开始,从上到下,从左到右。也就是
(1,1)->(2,1)..理解成(1,1)->(2,1) 了。。
初始得分30.
第三题:
解题过程:
1.一开始想的很复杂,结果到最后还发现我的dp方程有后效性. 于是就只有30分了。。
2.看了题解,最巧妙的地方还是图的转化:
从左到右做dp,F[i][j]表示前i列放了j个且第i列必须放的方案数。那么有:
F[i][j]=sum{ F[k][j-1]*(len[i]-j+1) }。
因为前面放了j-1个,所以有j-1行被控制了,因此第i列只有len[i]-(j-1)=len[i]-j+1 个 地方可以放。
最后统计答案ans=sum {F[i][tot]}。
3.第二题提交有一个点挂了。因为上面的方程是无法处理 tot=0的情况的。。所以要特殊处理。
二模 (10)day1的更多相关文章
- 二模 (16) day1&day2
第一题:题目大意: 数列a[0]=a[1]=1, a[n]=a[n-2]*a[n-1]*n,求a[n]的因子个数 mod 1000000007. n<=1000000 解题过程: 1.递推式还 ...
- 二模 (8) day2
第一题: 题目描述: 有 n 个炸弹,有些炸弹牵了一根单向引线(也就是说引线只有在这一端能被炸弹点燃),只要引爆了这个炸弹,用引线连接的下一个炸弹也会爆炸.每个炸弹还有个得分,当这个炸弹被引爆后就能得 ...
- 银行卡号码校验算法(Luhn算法,又叫模10算法)
有时候在网上办理一些业务时有些需要填写银行卡号码,当胡乱填写时会立即报错,但是并没有发现向后端发送请求,那么这个效果是怎么实现的呢. 对于银行卡号有一个校验算法,叫做Luhn算法. 一.银行卡号码的校 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- LUHN 模10 算法 银行卡校验
信用卡Luhn算法(模10)具体的校验过程如下: 1.从卡号最后一位数字开始,逆向将奇数位(1.3.5等等)相加. 2.从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去 ...
- [技术栈]C#利用Luhn算法(模10算法)对IMEI校验
1.Luhn算法(模10算法) 通过查看ISO/IEC 7812-1:2017文件可以看到对于luhn算法的解释,如下图: 算法主要分为三步: 第一步:从右边第一位(最低位)开始隔位乘2: 第二步:把 ...
- 二模 (12) day1
第一题: 题目大意: 求由N个1,M个0组成的排列的个数,要求在排列的任意一个前缀中,1的个数不少于0的个数.N,M<=5000. 解题过程: 1.看到N,M的范围就明确肯定不会是dp,因为起码 ...
- 二模 (10) day2
第一题: 题目大意:求出区间 [L,R]里约数最多的数. L,R<=10^9 解题过程: 1.一开始我就往恶心的数据去想了,比如 L=R=一个超级大的质数.. 那么 用搜索质因子的方法 是 ...
- 二模 (7) day1
第一题: 题目大意: 给出数轴上N棵树的坐标和高度,如果两棵树之间的距离小于其中一颗树的高度,那么就有树会被挡住.因此要把一些树砍矮一点.求砍树的总高度最小值. N<=100000; 解题过程: ...
随机推荐
- Git学习(1)Git 简介
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. Git ...
- 企业信息化快速开发平台JeeSite
网站:http://jeesite.com/ 可用于企业后台管理
- grade web的构建约定 convention
--2015.09.24 当使用gradle构建web应用时: src/main/javasrc/main/resourcessrc/main/webapp/resourcessrc/main/web ...
- 每一个程序员需要了解的10个Linux命令
作为一个程序员,在软件开发职业生涯中或多或少会用到Linux系统,并且可能会使用Linux命令来检索需要的信息.本文将为各位开发者分享10个有用的Linux命令,希望对你会有所帮助. 以下就是今天我们 ...
- 针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
在介绍之前,先简单说一说ASP.NET服务端GZIP压缩模块的作用及工作原理,很多人编写网页的时候页面因为使用了大量的JS特效又或者放置很多大型动态广告导致了页面或脚本体积庞大,通常都会使用一些压缩工 ...
- php内存处理须知【转】
04 Mar 11 深入理解PHP内存管理之谁动了我的内存 作者: Laruence( ) 本文地址: http://www.laruence.com/2011/03/04/1894.html 转 ...
- Python策略模式实现源码分享
1.让一个对象的某个方法可以随时改变,而不用更改对象的代码 2.对于动态类型的Python语言,不需要定义接口 3.基本的实现方法:用类作为参数传递 例如: 12_eg3.py class Movea ...
- wampserver2.5 apache2.4.9:forbidden,本机可以访问,局域网内部能访问。
wampserver2.5 apache2.4.9:forbidden,本机可以访问,局域网内部能访问. 因为做项目,多人分工,需要局域网内访问各自的项目. 然后安装了wampserver2.5,Ap ...
- oracel数据库基本知识和基本查询方法
Oracel数据库学习1.小型数据库 access,foxbase 中型数据库 mysql,sqlserver,informix 大型数据库 sybase,Oracle,db2 Oracle数据库需求 ...
- 两端对齐(兼容较好,支持IE)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...