- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Random用法 pascal
Random导论
前言——为什么要写此导论
在近几次的模拟赛中,笔者深感学艺不精,能力有限。但是测试数据是有限的,人品的力量是无穷的(有可能是maxlongint,也有可能是maxlongint+1),在模拟赛最后的十几分钟怎甘心坐以待毙?朴素?再朴素这几分钟也写不好吧?就算写完了,能过的点也是极其有限的。与其过那有限的一两个点,不如拼一下自己的RP。随机生成一个答案去赌一下。(类花哥者慎用!否则后果自负!!!)谨以此篇导论献给所有爆过0的OIer。
准备——积攒RP值
关于RP的理论随着信息竞赛的发展已经日趋完善,就不必我在这里多费口舌。详细资料百度一下,你就知道。(推荐:《RP导论》)
要谨记:为人要老实、做好事不要有太强的目的性、有义务性劳动主动参加、捡到东西要上交、在Dota中不要虐队友或电脑、一天感觉太顺是打开扫雷调成高级尝试连点99下不触雷……(额,看到有臭鸡蛋和烂菜叶飞过来了……)
代码——random的基础
笔者是学Pascal的,能力有限,只能提供Pascal的代码了。用C/C++的朋友委屈了,网上自己查一下吧。百度一下,你就知道。
首先,在主程序开头(或在调用的过程里)打上”randomize;”。
这个叫做“埋种子”,相当于系统的初始化,否则你怎么random都是一个数。然后呢,“ans:=random(n)”,ans是你要的答案,random是pascal自带的随机数函数,n是一个参数,是random出来的数的上界(下界是0,包括两端点)。注意n为整形数,random产生的也是整形数。
program ran(input,output);
var
i,j,n:Longint;
begin
randomize;
n:=10;
for i:=1 to 10 do
begin
j:=random(n);
write(j, );
end;
end.
大概就是这么个用法。
技巧——实战应用
适合用random题目大家也许都猜得到,就是那些答案输出简单(一个整数、yes或no);下面看一道真题。
【Description】
题目描述尧尧又饿了,所以决定在家中觅食……
尧尧的家是一个有N个房间的洞穴(问:为什么是洞穴……答:房价太贵……),由M条双向道路连接着它们,每对房间之间至多有一条道路,这其中有K个房间里存储着一盘生炒鸡,尧尧每吃一盘生炒鸡,体积增加1。
尧尧从他的房间里出发(房间编号为1),他当然希望吃得越多越好,可悲的是,尧尧的家长为了限制他的体重,把每条通道都进行了相应的改造,改造后的通道会有一个体积限制,如果体积严格大于通道的限制,可怜的尧尧会被卡住(卡卡卡卡卡……)
尧尧从他的房间里出发(他的房间里可能也有食物),经过一圈觅食过后(一条通道可以无限次走,只要不被卡住……)再回到他的房间,现在尧尧想知道他最多能吃多少盘生炒鸡得嘞?(话说,尧尧你爱吃生炒鸡么……)
【Input】输入格式
第一行输入N,M,K,之后的K行每行一个数字,代表该洞穴中有生炒鸡,之后的M行每行三个整数,代表双向通道的起点和终点和体积限制
【Output】输出格式
一个数,代表尧尧最多吃到生炒鸡的盘数【样例】
Inputhunger.in
6 7 5
1
2
3
4
5
1 2 3
3 6 2
6 2 10
2 4 1
5 1 1
4 5 1
1 6 1
Outputhunger.out
4
样例说明
其中一种觅食顺序为:4-3-2-1
【数据规模】
1 =N=100
1 = M = 1000
1 = K = 14readln(n,m,k);
for i:=1 to k do readln(fry[i]);
for i:=1 to m do
begin
readln(a,b,t);
if t=1 then for j:=1 to k do if fry[j]=b then min:=1;
end;
for i:=1 to k do if fry[i]=1 then begin inc(min); break; end;
ans:=random(k);
while (ans=k) or (ansmin) do ans:=random(k);
writeln(ans);
结果如下:
发现我对random做的优化了吗?必须要确定一个上界和一个下界,否则在茫茫数海中random一个正确答案耗费的RP值可能远远不止maxlongint De。
看另一实例:
TSOI排队
TSOI2010的成员在伟大的教练XH的带领下排成了一条直队。
显然,不同的童鞋们身高不一定相同……
现在,XH想知道,如果找出一些连续的童鞋
文档评论(0)