题意:

A在[L, R]之间随机选取一个数X,之后B来猜这个数,如果猜的数比X小,那么A就告诉B猜小了,如果猜的数大于X,那么以后A永远只会回答B是否猜对了,问在最坏的情况下B至少要猜多少次,并求出有多少种方案

在[L, R]之间猜数同等于在[1, R-L+1]之间猜数,那么就当做在[1, R]之间猜数吧

问题反过来想,假设B只有1次猜的机会,那么在保证B可以猜对的情况下R最大能是多少?(废话肯定R只能为1)

那假设B只有k次猜的机会,在保证B可以猜对的情况下R最大能是多少?

假设当前B猜的数是p,如果p>X,那么完蛋以后P只能从1猜到p-1,所以B第一次必须猜小于等于k的数

这样也显然猜k就好了,就算k>X,从1猜到k-1也最多k-1次就可以猜对

若k<X,下一次他猜k+k-1一定最优,因为如果k+k-1>X,那么从k+1猜到k-2最多k-2次就可以猜对,加上一开始猜的1次(和当前一次)也不会超过k次

同理若k+k-1<X,下一次就猜k+k-1+k-2……

这样模型和答案就都出来了,假设B只有k次猜的机会,那么允许最大的R就是(1+k)*k/2

那么这题的第一个问题就解决了,对于[L, R],只要找到最小的满足(1+k)*k/2>=R-L+1,k就是答案

难在有多少种方案

……

其实也不难,令p[R]表示范围[1, R]是的最优猜测次数

more[i]表示在保证B猜i次一定可以猜对的情况下R最大能是多少

cnt[R]表示范围[1, R]的最优猜测方案数,sum[]是cnt[]的前缀和

那么对于当前的R,主要是看B第一次可以猜哪些数,这样问题就可以变成子问题递推解决

很显然B猜完第一个数之后剩下的规模一定要小于more[p[R]-1],否则就无法最优了,而剩下的规模可以是0到more[p[R]-1]中的任意一种,所以cnt[R] = ∑cnt[more[p[R]-1]] = sum[more[p[R]-1]]

可是这样不对,别忘了你第一次猜的数不能大于p[R]!!

所以有cnt[R] = sum[more[p[R]-1]]-sum[R-p[R]-1]

预处理1到5000000的p[]和cnt[],每次询问[L, R],答案就是p[R-L+1],cnt[R-L+1]

#include<stdio.h>
#define mod 100000073
int p[5000005], more[5005], cnt[5000005] = {0,1}, sum[5000005] = {1,2};
int main(void)
{int l, r, i, j;for(r=1,i=1;i*(i-1)/2<=5000000;i++){for(j=i*(i-1)/2+1;j<=i*(i+1)/2 && j<=5000000;j++)p[j] = i;more[i] = i*(i+1)/2;}for(i=2;i<=5000000;i++){cnt[i] = (sum[more[p[i]-1]]-sum[i-p[i]-1]+mod)%mod;sum[i] = (sum[i-1]+cnt[i])%mod;}while(scanf("%d%d", &l, &r)!=EOF)printf("%d %d\n", p[r-l+1], cnt[r-l+1]);return 0;
}

HDU 5981 2016ICPC大连 K: Guess the number(推理)相关推荐

  1. shift-and(HDU 5972 2016ICPC大连 B: Regular Number)

    题意: 有一个长度为n的子串,这个子串有多种形态,也就是每一位都可以是几个数的其中一个,还有一个母串str[] 如果某种形态的子串可以和母串匹配上,就说明这个子串是有价值的 输出所有的有价值的形态(按 ...

  2. 树的点分治(HDU 5977 2016ICPC大连 G: Garden of Eden)

    题意: 有一棵n个节点的数,每个点都有一个值(1<=pi<=k),问有多少条路径满足包含1到k中的所有数字 可以想到状压+树形dp,但是开dp[50005][1025]的数组内存占用过大, ...

  3. HDU 5975 2016ICPC大连 E: Aninteresting game(树状数组原理)

    题意: 有n个集合,第i个集合里面包含在范围[i-lowbit(i)+1, i]内的所有数 有2种询问,1 x y表示集合a到集合b的长度和:2 x表示有多少个集合里面包含数字x 对于第二个询问非常简 ...

  4. HDU 5976 2016ICPC大连 F: Detachment(找规律)

    题意: 将n拆成a1+a2+a3+-+ax的形式(ai≠aj),让a1*a2*a3*-*ax的值最大,求这个最大值 找规律 n=35:2+3+4+5+6+7+8:      max:2*3*4*5*6 ...

  5. HDU 5971 2016ICPC大连 A: Wrestling Match(二分图判断)

    题意:这题难在题意.. 因为题面太尴尬了所以直接转了吧,据说很多写法都能过 有n个点m条边的图,已知有x个点是黄色的,y个点是红色的(最后的x+y行输入的是这些点的编号) 问是否能将这个图转化成二分图 ...

  6. HDU 5974 2016ICPC大连 D: A Simple Math Problem

    题意: 已知①x+y=a:②LCM(x, y)=b,给出a和b问是否有x和y满足条件(x<y) 假设x' = x/Gcd(x,y),y' = y/Gcd(x,y)那么有 暴力枚举Gcd(x, y ...

  7. HDU 5980 2016ICPC大连 J: Find Small A

    题意: 一个int型占4个字节,一个char型占1个字节,也就是说可以将一个int型"拆成"4个char型,如果拆完之后其中一个同等于字母'a',则说明这个int型"包含 ...

  8. HDU 5979 2016ICPC大连 I: Convex

    题意: 一个凸n边形每个顶点到原点的距离都相等,并且与原点有条连线,这n条连线把多边形分成了n个三角形 已知每个三角形坐标系原点的那个夹角的度数,求多边形面积 直接用三角形面积公式:S = 1/2*a ...

  9. HDU 5978 2016ICPC大连 H: To begin or not to begin

    题意: 黑色盒子里有n个白球,1个红球,两个人轮流取球,先取出红球的胜利 对于不同的n,先手优势输出1,劣势输出2,平等输出0 n=1,显然概率为1/2,平等 n=2,第一发取到白球概率是2/3也就是 ...

最新文章

  1. 【C#】Gif文件生成
  2. UniT | Facebook发布全新智能通用Agent!
  3. 深度学习核心技术精讲100篇(三十六)-EdgeRec:边缘计算在淘宝推荐系统中的大规模应用
  4. python网页爬虫例子_Python 利用Python编写简单网络爬虫实例3
  5. [CODEVS 1281] Xn数列
  6. 杀人游戏约瑟夫环(洛谷P1145题题解,Java语言描述)
  7. YARN组件详细介绍
  8. 去除浏览器输入框等的边框(包括手机浏览器)
  9. 手摸手教你git配置ssh
  10. IQ FMEA-失效模式及影响分析
  11. cv2-drawline
  12. 浙江移动无线dns服务器地址,首选dns_浙江省宁波市(中国移动)首选dns是什么,备选dns是什么...
  13. 色彩专题(PS的颜色理论)
  14. SylixOS -- 网卡驱动浅析
  15. 批量图片缩小工具V1.08绿色版
  16. html中小星星打分,折腾:2颗星星+纯CSS实现星星评分交互效果
  17. hexo博客搭建及主题优化(一)
  18. 8万字208道Java经典面试题总结(附答案)
  19. dp在约会上是什么意思_饭圈用语dp是什么意思什么梗? 饭圈为什么喜欢用缩写?...
  20. PsExec用法及远程操控执行脚本举例

热门文章

  1. python自学行吗-python能够自学吗
  2. 【百度贾磊】汉语语音识别技术重大突破:LSTM+CTC详解(22PPT)
  3. 简析语音识别技术的工作原理
  4. mysql问题排查_mysql问题排查
  5. iphone各机型参数对比_「科技美学」又是一年“双十一”,畅销机型有哪些?
  6. golang mysql 工具类_golang操作mysql使用总结
  7. 【动态规划】01背包:P1049 装箱问题
  8. 蓝桥杯笔记:DFS(深度优先搜索)解决问题
  9. Darwin Streaming Server 安装流程
  10. 笔记本电脑如何保养_笔记本电脑过热 五招教你轻松解决