【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 ...
随机推荐
- mongodb 数据备份与恢复
备份 语法 mongodump -h dbhost -d dbname -o dbdirectory -h:服务器地址,也可以指定端口号 -d:需要备份的数据库名称 -o:备份的数据存放位置,此目录中 ...
- 团队作业4——第一次项目冲刺(Alpha版本)2017.11.19
第三次会议:2017-11-16 第二次会议讨论的还没有完全实现,于是在第三次会议上对此进行了一些对我们工作上的看法,得出结论:多花时间啊!!!! 又没照照片图: 会议主要内容: 1.登录注册完善 2 ...
- java方法的定义格式
Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式为: [修饰符1 修饰符2 …..] 返回值类型 方法名( 形式参数列表 ){ Java 语句;… … … } 例如 ...
- nyoj 背包问题
背包问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w< ...
- zookeeper入门系列:概述
zookeeper可谓是目前使用最广泛的分布式组件了.其功能和职责单一,但却非常重要. 在现今这个年代,介绍zookeeper的书和文章可谓多如牛毛,本人不才,试图通过自己的理解来介绍zookeepe ...
- python小练习之一
下面的练习本身不难,比如打印1到10,计算1+2+3+...+100 ,最后一个是计算 1-2+3-4...-100 用了类的方法实现 用了列表生成器 用"高级"一丢丢的写法来实现 ...
- 详解k8s一个完整的监控方案(Heapster+Grafana+InfluxDB) - kubernetes
1.浅析整个监控流程 heapster以k8s内置的cAdvisor作为数据源收集集群信息,并汇总出有价值的性能数据(Metrics):cpu.内存.网络流量等,然后将这些数据输出到外部存储,如Inf ...
- angular2 学习笔记 ( 第3方插件 jQuery and ckeditor )
refer : https://forums.meteor.com/t/importing-ckeditor-using-npm/28919/2 (ckeditor) https://github ...
- Python 爬虫基础知识
requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...
- ASC学习笔记
TCL:(Tool Command Language), a computer programming languagecharm++:基于C++的面向对象的并行编程语言.Charm++ is a p ...