【AIM Tech Round 4 (Div. 2) D Prob】
·英文题,述大意:
有一个长度为n(n<=50000)的单链表,里面的元素是递增的。链表存储在一个数组里面,给出长度n、表头在数组的下标和一个值w。题目要求求出链表中大于等于w值的元素中的最小元素。注意,这道题是一道interactive。由于链表是未知的,最多可以进行1999个询问,询问形式:?i。表示询问数组下标为i,询问后,会得到一个答案组(val,Next),表示询问的元素是val,链表下一位所在的数组下标是Next。最终如果找到答案输出:!ans,如果没有找到答案输出:! –1。
分析:
题目描述有点不准确,文中"没有找到答案"的意思是序链表中不存在满足条件的元素,而不仅仅是询问没找到。
观察数据范围:50000对1999询问,这看上去是不可能的,因为交互题是询问后就在线回答,大概意思就是你问测评机问题,它回答你……所以这看上去就是在蒙答案,蒙不对就完了(50000这么大,肯定完了)!
接下来用到随机算法。我们将总数1999拆成a+b。a表示我们先随机生成a个询问,表示在a个询问中最靠近答案的那个向后暴力行走链表b次。上文一句话就概括了本题的做法——为什么这样做是对的?我们将链表从左向右画出来(注意,不是把数组画出来),那么从左向右元素是递增的。我们现在尝试计算可能会遗漏答案情况的概率:

如图,蓝色的点就是随机的点。然后我们会找比val小但是又最近的点,那么向前走链表b次,看看是否找到答案。如果我们不能找到答案,那么由图可知,只有当L>b时,我们的算法是错误的。现在来算一下概率:
对于一个随机点,它不会落在答案点前面b长度的区间内的概率是:
P1=(n-b)/n
那么,由于我们随机了a个点,可得没有点落在答案点前b长度的区间的概率是(这个当然表示我们算法错误的概率啊):
Pall=((n-b)/n)a
这个呢,因为啊a+b=1999,我们令x=b,y=1-((n-x)/n)1999-x
那么可以看出y表示我们的算法能够正确的概率,我们将这个函数分析一下(比如做出图像):

我们发现当x=1000左右时,y几乎是1了(更精确见图中数据)。所以这道题随机算法竟然可以这样达到美妙!所以我们最终的方法就是:先随机询问 1000个点,然后从最优点走999次,判断答案是否存在了啦啦。
最后一个代码提醒:这道题直接用rand()会在第六个测试点WA,原因是随机数不均匀,我们需要改成:rand()*rand()*rand()……
CF型短代码:
#include<bits/stdc++.h>
#define _ fflush(stdout)
#define go(i,a,b) for(int i=a;i<=b;i++)
int n,val,a=-,T,w,Next,l;
int main()
{
srand(time(NULL));
scanf("%d%d%d",&n,&l,&val);
T=;while(T--)
{
printf("? %d\n",1ll*rand()*rand()*rand()%n+);_;
scanf("%d%d",&w,&Next);
if(w<val&&w>a)a=w,l=Next;
}
T=;while(T--)
{
if(l==-)break;
printf("? %d\n",l);_;
scanf("%d%d",&w,&Next);l=Next;
if(w>=val){printf("! %d\n",w);_;return ;}
}
puts("! -1");_;return ;
}//Paul_Guderian
又一种信仰将要破灭,又一个时代将要来临.———汪峰《风暴来临》
【AIM Tech Round 4 (Div. 2) D Prob】的更多相关文章
- 【AIM Tech Round 4 (Div. 1) B】Interactive LowerBound
[链接]http://codeforces.com/contest/843/problem/B [题意] 给你一个数组模拟的单链表,放在一个长度为n的数组里面,然后告诉你表头的位置在哪里; 你可以最多 ...
- 【AIM Tech Round 4 (Div. 2) A】Diversity
[链接]http://codeforces.com/contest/844/problem/A [题意] 大水题 [题解] 看看不同的个数num是不是小于k,小于k,看看len-num够不够补的 [错 ...
- 【AIM Tech Round 4 (Div. 2) B】Rectangles
[链接]http://codeforces.com/contest/844/problem/B [题意] 也是道计数水题,没什么记录意义 [题解] 枚举每个点的位置在,然后往右往下 枚举和它一样颜色的 ...
- 【AIM Tech Round 4 (Div. 2) C】Sorting by Subsequences
[链接]http://codeforces.com/contest/844/problem/C [题意] 水题,没有记录意义 [题解] 排序之后,记录每个数字原来在哪里就好. 可以形成环的. 环的个数 ...
- 【AIM Tech Round 5 (Div. 1 + Div. 2) 】
A:https://www.cnblogs.com/myx12345/p/9844152.html B:https://www.cnblogs.com/myx12345/p/9844205.html ...
- codeforce AIM tech Round 4 div 2 B rectangles
2017-08-25 15:32:14 writer:pprp 题目: B. Rectangles time limit per test 1 second memory limit per test ...
- 【AIM Tech Round 5 (rated, Div. 1 + Div. 2) 总结】【题解往前或往后翻,不在这】
又是爆炸的一场 心态有点小崩.但问题不大.. 看A题,一直担心有多个正方形..小心翼翼地看完之后,毅然地交上去了. [00:08] A[Accpted] 然后开始看B题. 觉得和之前做的某题很像,但翻 ...
- 【AIM Tech Round 5 (rated, Div. 1 + Div. 2) A】 Find Square
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 找到左上角.往下一直走,往右一直走走到B边界就好. 中点的话.直接输出中位数 [代码] #include <bits/stdc ...
- 【AIM Tech Round 5 (rated, Div. 1 + Div. 2) B】Unnatural Conditions
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让a+b的和为100000000...0这样的形式就好了 这样s(a+b)=1<=m就肯定成立了(m>=1) 然后至于s ...
随机推荐
- 201621123031 《Java程序设计》第13周学习总结
作业13-网络 1.本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被 ...
- 201621123031 《Java程序设计》第9周学习总结
作业09-集合与泛型 1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 一.泛型的基本概念 泛型是JDK 1.5的一项新特性,它的本质是参数化类型(Paramet ...
- javabean 是什么?
JavaBean规范 Bean的中文含义是“豆子”,顾名思义,JavaBean是指一段特殊的Java类, 就是有默然构造方法,只有get,set的方法的java类的对象. 专业点解释是: JavaBe ...
- Java并发编程实战 之 线程安全性
1.什么是线程安全性 当多个线程访问某个类时,不管运行时环境采用何种调用方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全 ...
- js 时间戳 vue 时间戳的转换 ?
在没有用vue做项目之前 也遇到过戳转换的问题 直接函数 调用 方法 这个也可以写成vue的 把function去掉 formatDate后面加冒号 就可以了 当然这个不是原创 但是是谁的我忘记了 ...
- python性能分析--cProfile
Python标准库中提供了三种用来分析程序性能的模块,分别是cProfile, profile和hotshot,另外还有一个辅助模块stats.这些模块提供了对Python程序的确定性分析功能,同时也 ...
- Python-进程与线程理论基础-Day10
进程与线程理论基础 1.背景知识 理论基础: 一 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理.调度进程,并且将多个进程对硬件的竞争变得有序 二 多道技术: 1.产生背景 ...
- Swagger: 一个restful接口文档在线生成+功能测试软件
一.什么是 Swagger? Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 ...
- Spring Security入门(3-7)Spring Security处理页面的ajax请求
- margin-top塌陷
margin-top 塌陷 在两个不浮动的盒子嵌套时候,内部的盒子设置的margin-top会加到外边的盒子上,导致内部的盒子margin-top设置失败,解决方法如下: 1.外部盒子设置一个边框: ...