2017.08.06【NOIP提高组】模拟赛B组
Summary
今天的比赛60+100+100=260分,没有想到第一题正解是搜索,我与AK差一段距离,这段距离,叫倒着搜。总的来说不是很难。
Problem
T1 天平
题目大意
给你N个排序好的砝码的质量,从第三个砝码开始,它的重量最少是前两个砝码的质量之和。天平容不得超过C质量的质量。问最大的质量可以是多少。
想法
一般Usaco的题目都不会水到哪里去,但是今天的。。。
有两种方法。
(1) 爆搜+剪枝
爆搜应该都会,参数是枚举到第K个,当前砝码是重S
优化一:如果当前的砝码质量加上没有抉择(没有递归到)的砝码质量还是不能比当前得出的最大值大,则剪枝
优化二:倒着搜可以减少之后的分支,当然可以降低时间复杂度,是个很了得的东西,有道题靶形数独同样适用这种方法。
(2) 中途相遇法
这个方法效率很玄,但是总比爆搜稳妥
可以把1~(n+1)/2和(n+1)/2~n这两段的方案数用dfs求出来,然后枚举。
可以用二分来找,最好用两个指针。
T2 游历的路线
题目大意
在从1城市开开始走到n城市,期间有m天,其中第m天一定要在n城市,两两城市之间来或往的马车费用是周期性的,并且有些时候可能不可以从某个城市去另一个城市,问满足条件的最小费用。
想法
显然可以用动态规划。
设f[i,j]表示第i天到第j城市
显然需要知道i-1天在哪个城市,我们可以枚举,设i-1天在k城市
f[i,j]=min{f[i-1,k]+s}(其中s代表费用,费用的周期可以用除法原理来算(x-1) mod y+1)
初始化显然,效率显然,答案显然。
T3 最短路(shortest)
题目大意
求从(0,0)~(n,m)经过点的和的最小值。
第(x,y)点的权值为f[x,y],他的计算方法是f[x,y]=f[x-1,y]+f[x,y-1],如果(x=0) or (y=0)那么f[x,y]的值为1
想法
通过一系列的对拍,我们可以发现,如下图红边的走法,必定最优,但不知道怎么证明。我们设较短边的长为n,较长边的长为m

我们可以总结成一个公式

那么,关键就成了如何求出F[i,m] (i=1~n)。
我们考虑把他转化成组合数的形式
根据题目给出的F数组计算方法,可以得出f[x,y]=C(min(x,y),x+y)
那么显然F[i,m] (i=1~n)就是C(i,i+m) (i=1~n)
其实每个组合数,可以理解成一个数除另一个数,比如对于C(n,m)

试想一下,如果x<y,求C(x,y)+C(x+1,y+1)+C(x+2,y+2),我们设上面这个式子分子为tot1,分母为tot2
C(x+1,y+1)相比C(x,y)的tot1和tot2,发现tot1多乘了y+1,tot2多乘了x+1,
C(x+2,y+2)相比C(x+1,y+1)的tot1和tot2,发现tot1多乘了y+2,tot2多乘了x+2
说明,我们每次循环,tot1都乘i+m,tot2都乘i,那么,每次的C(i,i+m)就是tot1/tot2
但是问题来了,tot1和tot2都很大,如果相除是不太可能的,先mod再除答案是错误的,只能使用逆元了。
逆元
根据费马小定理可以得到如下式子

两边同时除b得到,高斯研究过,发现是等价的

两边同时除b得到,高斯研究过,发现是等价的

两边同时乘一个a,并且交换位置,得到如下式子

发现,我们要求a除b取模p的结果,其实是等价于abp-2取模p的结果的,也就是说,欲想知道a除b取模p的结果,其实就是算出abp-2取模p的结果就行了
因为a*b mod p,是等价于a mod p*b mod p的,ak mod p是等价于(a mod p)k的,所以我们这里可以取mod来避免高精度。
当然,F[i,m] (i=1~n)这一部分,可以使用一个组合公式就可以了,具体实现和题解请选手自行考虑。
2017.08.06【NOIP提高组】模拟赛B组的更多相关文章
- 2017.1.16【初中部 】普及组模拟赛C组总结
2017.1.16[初中部 ]普及组模拟赛C组 这次总结我赶时间,不写这么详细了. 话说这次比赛,我虽然翻了个大车,但一天之内AK,我感到很高兴 比赛 0+15+0+100=115 改题 AK 一.c ...
- 2018.12.30【NOIP提高组】模拟赛C组总结
2018.12.30[NOIP提高组]模拟赛C组总结 今天成功回归开始做比赛 感觉十分良(zhōng)好(chà). 统计数字(count.pas/c/cpp) 字符串的展开(expand.pas/c ...
- 2018.12.08【NOIP提高组】模拟B组总结(未完成)
2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...
- ZROI提高组模拟赛05总结
ZROI提高组模拟赛05总结 感觉是目前为止最简单的模拟赛了吧 但是依旧不尽人意... T1 有一半的人在30min前就A掉了 而我花了1h11min 就是一个简单的背包,我硬是转化了模型想了好久,生 ...
- NOIP2017提高组 模拟赛15(总结)
NOIP2017提高组 模拟赛15(总结) 第一题 讨厌整除的小明 [题目描述] 小明作为一个数学迷,总会出于数字的一些性质喜欢上某个数字,然而当他喜欢数字k的时候,却十分讨厌那些能够整除k而比k小的 ...
- NOIP2017提高组 模拟赛13(总结)
NOIP2017提高组 模拟赛13(总结) 第一题 函数 [题目描述] [输入格式] 三个整数. 1≤t<10^9+7,2≤l≤r≤5*10^6 [输出格式] 一个整数. [输出样例] 2 2 ...
- NOIP2017提高组模拟赛 10 (总结)
NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...
- NOIP2017提高组模拟赛 8(总结)
NOIP2017提高组模拟赛 8(总结) 第一题 路径 在二维坐标平面里有N个整数点,Bessie要访问这N个点.刚开始Bessie在点(0,0)处. 每一步,Bessie可以走到上.下.左.右四个点 ...
- NOIP2017提高组模拟赛 9 (总结)
NOIP2017提高组模拟赛 9 (总结) 第一题 星星 天空中有N(1≤N≤400)颗星,每颗星有一个唯一的坐标(x,y),(1≤x,y ≤N).请计算可以覆盖至少K(1≤K≤N)颗星的矩形的最小面 ...
- NOIP2017提高组模拟赛 7(总结)
NOIP2017提高组模拟赛 7(总结) 第一题 斯诺克 考虑这样一个斯诺克球台,它只有四个袋口,分别在四个角上(如下图所示).我们把所有桌子边界上的整数点作为击球点(除了4个袋口),在每个击球点我们 ...
随机推荐
- 蓝桥杯 历届试题 幸运数 dfs
历届试题 幸运数 时间限制:1.0s 内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成 . 首先从1开始写出自然数1,2, ...
- 封装cuda/cudnn写卷积网络前向计算程序
目录 基本编译配置 一些常识 BN层的坑 cuda基础 向cuda核函数传入结构体指针? 参考:http://galoisplusplus.coding.me/blog/2018/05/22/cuda ...
- [转] createObjectURL方法 实现本地图片预览
ie6 可以直接显示本本地路径的图片 如: <img src="file://c:/3.jpg" /> ~~~网上都说ie7就不支持这种文件系统路径的url,但测试 ...
- Java第三阶段学习(七、线程池、多线程)
一.线程池 1.概念: 线程池,其实就是一个容纳多个线程的容器,其中的线程可以重复使用,省去了频繁创建线程对象的过程,无需反复创建线程而消耗过多资源,是JDK1.5以后出现的. 2.使用线程池的方式- ...
- reconnecting-websocket.js
websocket是HTML5下一个不错的网络协议解决方案,有一个场景很多猿猿都会遇到,手机锁屏后大约60秒,IOS会自动断开websocket连接,连接丢失了,那我们的数据也就断了.websocke ...
- python全栈开发day59-Django基础
一.今日内容总结 1.HTTP协议: 请求:浏览器发给服务端的消息 格式: 请求方法 URL 协议版本\r\n k1: v1\r\n k2: v2\r\n \r\n 请求体(请求数据) 响应:服务端返 ...
- redis在Windows10下的安装
以前在linux学习了redis,考虑到电脑负荷,这次学习一下如何在本地Windows下安装redis,进行学习. 下面的一些安装的步骤: 1.下载 网址:https://github.com/Mic ...
- ActiveMQ挂了,重启一直无法将所有实例启起来的问题
背景 2017年3月29日 下午2-3点时分,工单模块无法访问.跟踪日志发现,ActiveMQ连接不上导致整个工单模块瘫痪: 首先判断可能是系统需要然后尝试重启工单模块,重新启动工单模块,结果:重启 ...
- Linux 文件目录结构
/ 文件系统的入口,最高一级目录 /bin 存放系统所需的基本命令 /boot 包含Linux内核及系统引导程序所需要的文件 ( 如连接文件,镜像文件等 ...
- java分页实现
虽然现在有很多好用的框架,对分页进行支持,很简单的就把分页的效果做出来,但是如果自己手写是一个怎样的流程的?今天就来说说它,手动实现分页效果. 一.分页的思路 首先我们得知道写分页代码时的思路,保持思 ...