Random用法 pascal
- 格式:doc
- 大小:94.50 KB
- 文档页数:13
Pascal 函数大全1.数学函数2.标量函数3.转换函数4.杂类函数Pascal语言函数集(含Delphi控件属性) abort 函数引起放弃的意外处理abs 函数绝对值函数addexitproc 函数将一过程添加到运行时库的结束过程表中addr 函数返回指定对象的地址adjustlinebreaks函数将给定字符串的行分隔符调整为cr/lf序列align 属性使控件位于窗口某部分alignment 属性控件标签的文字位置allocmem 函数在堆栈上分配给定大小的块allowgrayed 属性允许一个灰度选择ansicomparestr 函数比较字符串(区分大小写)ansicomparetext 函数比较字符串(不区分大小写)ansilowercase 函数将字符转换为小写ansiuppercase 函数将字符转换为大写append 函数以附加的方式打开已有的文件arctan 函数余切函数assignfile 函数给文件变量赋一外部文件名assigned 函数测试函数或过程变量是否为空autosize 属性自动控制标签的大小backgrounddi2001.jpg 属性背景色beginthread 函数以适当的方式建立用于内存管理的线程bevelinner 属性控件方框的内框方式bevelouter 属性控件方框的外框方式bevelwidth 属性控件方框的外框宽度blockread 函数读一个或多个记录到变量中blockwrite 函数从变量中写一个或多个记录borderstyle 属性边界类型borderwidth 属性边界宽度break 命令终止for、while、repeat循环语句brush 属性画刷caption 属性标签文字的内容changefileext 函数改变文件的后缀chdir 函数改变当前目录checked 属性确定复选框选中状态chr 函数返回指定序数的字符closefile 命令关闭打开的文件color 属性标签的颜色columns 属性显示的列数comparestr 函数比较字符串(区分大小写)concat 函数合并字符串continue 命令继续for、while、repeat的下一个循环copy 函数返回一字符串的子串cos 函数余弦函数ctl3d 属性是否具有3d效果cursor 属性鼠标指针移入后的形状date 函数返回当前的日期datetimetofiledate函数将delphi的日期格式转换为dos的日期格式datetimetostr 函数将日期时间格式转换为字符串datetimetostring 函数将日期时间格式转换为字符串datetostr 函数将日期格式转换为字符串dayofweek 函数返回星期的数值dec 函数递减变量值decodedate 函数将日期格式分解为年月日decodetime 函数将时间格式分解为时、分、秒、毫秒delete 函数从字符串中删除子串deletefile 命令删除文件diskfree 函数返回剩余磁盘空间的大小disksize 函数返回指定磁盘的容量dispose 函数释放动态变量所占的空间disposestr 函数释放字符串在堆栈中的内存空间ditherbackgrounddi2001.jpg?使背景色的色彩加重或减少50%dragcursor 属性当鼠标按下时光标的形状dragmode 属性按动的作用方式dropdowncount 属性容许的显示数据项的数目editmask 属性编辑模式enabled 属性是否使标签呈现打开状态encodedate 函数将年月日合成为日期格式encodetime 函数将时、分、秒、毫秒合成为时间格式endmargin 属性末尾边缘eof 函数对有类型或无类型文件测试是否到文件尾eoln 函数返回文本文件的行结束状态erase 命令删除外部文件exceptaddr 函数返回引起当前意外的地址exclude 函数从集合中删除一些元素exceptobject 函数返回当前意外的索引exit 命令立即从当前的语句块中退出exp 函数指数函数expandfilename 函数返回包含绝对路径的字符串extendedselect 属性是否允许存在选择模式,true时,multiselect才有意义extractfiledir 函数返回驱动器和路径extractfileext 函数返回文件的后缀extractfilename 函数返回文件名extractfilepath 函数返回指定文件的路径fileage 函数返回文件已存在的时间fileclose 命令关闭指定的文件filecreate 命令用指定的文件名建立新文件filedatetodatetime 函数nbsp;将dos的日期格式转换为delphi的日期格式fileexists 函数检查文件是否存在filegatattr 函数返回文件的属性filegetdate 函数返回文件的dos日期时间标记fileopen 命令用指定的存取模式打开指定的文件filepos 函数返回文件的当前指针位置fileread 命令从指定的文件读取filesearch 命令在目录中搜索指定的文件fileseek 函数改变文件的指针filesetattr 函数设置文件属性filesetdate 函数设置文件的dos日期时间标记filesize 函数返回当前文件的大小filewrite 函数对指定的文件做写操作fillchar 函数用指定的值填充连续字节的数findclose 命令终止findfirst/findnext序列findfirst 命令对指定的文件名及属性搜索目录findnext 命令返回与文件名及属性匹配的下一入口floattodecimal 函数将浮点数转换为十进制数floattostrf 函数将浮点数转换为字符串floattostr 函数将浮点数转换为字符串floattotext 函数将给定的浮点数转换为十进制数floattotextfmt 函数将给定的浮点数转换为十进制数flush 函数将缓冲区的内容刷新到输出的文本文件中fmtloadstr 函数从程序的资源字符串表中装载字符串fmtstr 函数格式化一系列的参数,其结果以参数result 返回 font 属性设置字体format 函数格式化一系列的参数并返回pascal字符串formatbuf 函数格式化一系列的参数formatdatetime函数用指定的格式来格式化日期和时间formatfloat 函数指定浮点数格式frac 函数返回参数的小数部分freemem 函数按给定大小释放动态变量所占的空间getdir 返回指定驱动器的当前目录getheapstatus 返回内存管理器的当前状态getmem 建立一指定大小的动态变量,并将指针指向该处getmemorymanager 返回内存管理器的入口点glyph 函数按钮上的图象halt 停止程序的执行并返回到操作系统hi 返回参数的高地址位high 返回参数的上限值hint 属性提示信息int 返回参数的整数部分include 添加元素到集合中insert 在字符串中插入子串inttohex 将整型数转换为十六进制数inttostr 将整型数转换为字符串ioresult 返回最新的i/o操作完成状态isvalidident 测试字符串是否为有效的标识符items 属性默认显示的节点kind 属性摆放样式largechange 属性最大改变值layout 属性图象布局length 函数返回字符串的动态长度lines 属性缺省显示内容ln 函数自然对数函数lo 函数返回参数的低地址位loadstr 函数从应用程序的可执行文件中装载字符资源lowercase 函数将给定的字符串变为小写low 函数返回参数的下限值max 属性最大值maxlength 属性最大长度min 属性最小值mkdir 命令建立一子目录move 函数从源到目标复制字节multiselect 属性允许同时选择几个数据项name 属性控件的名字new 函数建立新的动态变量并设置一指针变量指向它newstr 函数在堆栈上分配新的字符串now 函数返回当前的日期和时间odd 测试参数是否为奇数onactivate 事件焦点移到窗体上时触发onclick 事件单击窗体空白区域触发ondblclick 事件双击窗体空白区域触发onclosequery 事件使用者试图关闭窗体触发onclose 事件窗体关闭后才触发oncreate 事件窗体第一次创建时触发ondeactivate 事件用户切换到另一应用程序触发ondragdrop 事件鼠标拖放操作结束时触发ondragover 事件有其他控件从他上面移过触发onmousedown 事件按下鼠标键时触发onmouseup 事件释放鼠标键时触发onmousemove 事件移动鼠标时触发onhide 事件隐藏窗体时触发onkeydown 事件按下键盘某键时触发onkeypress 事件按下键盘上的单个字符键时触发onkeyup 事件释放键盘上的某键时触发onpaint 事件窗体上有新部分暴露出来触发onresize 事件重新调整窗体大小触发onshow 事件在窗体实际显示之前瞬间触发ord 返回序数类的序数outlinestyle 属性类型outofmemoryerror 引起outofmemory 意外pageindex 属性页索引pages 属性页paramcount 函数返回在命令行上传递给程序的参数数量paramstr 函数返回指定的命令行参数pen 属性画刷设置pi 函数返回圆周率pipicture 属性显示图象pictureclosed 属性设置closed位图pictureleaf 属性设置leaf位图pictureminus 属性设置minus位图pictureopen 属性设置open位图pictureplus 属性设置plus位图pos 函数在字符串中搜索子串pred 函数返回先前的参数random 函数返回一随机函数randomize 函数用一随机数初始化内置的随机数生成器read 函数对有格式的文件,读一文件组件到变量中;对文本文件,读一个或多个值到一个或多个变量中readln 函数执行read过程,然后跳到文件下一行readonly 属性只读属性reallocmem 函数分配一动态变量rename 函数重命名外部文件renamefile 函数对文件重命名reset 函数打开已有的文件rewrite 函数建立并打开一新的文件rmdir 函数删除空的子目录round 函数将实数值舍入为整型值runerror 函数停止程序的执行scrollbars 属性滚动条状态seek 函数将文件的当前指针移动到指定的组件上seekeof 函数返回文件的文件结束状态seekeoln 函数返回文件的行结束状态selectedcolor 属性选中颜色setmemorymanager 函数设置内存管理器的入口点settextbuf 函数给文本文件指定i/o缓冲区shape 属性显示的形状showexception 函数显示意外消息与地址sin 函数正弦函数sizeof 函数返回参数所占的字节数smallchange 属性最小改变值sorted 属性是否允许排序sqr 函数平方函数sqrt 函数平方根函数startmargin 属性开始边缘state 属性控件当前状态str 函数将数值转换为字符串stralloc 函数给以null结束的字符串分配最大长度-1的缓冲区strbufsize 函数返回存储在由stralloc分配的字符缓冲区的最大字符数strcat 函数将一字符串附加到另一字符串尾并返回合并的字符串strcomp 函数比较两个字符串strcopy 函数将一个字符串复制到另一个字符串中strdispose 函数释放堆栈上的字符串strecopy 函数将一字符串复制到另一个字符串并返回结果字符串尾部的指针strend 函数返回指向字符串尾部的指针stretch 属性自动适应控件的大小strfmt 函数格式化一系列的参数stricomp 函数比较两个字符串(不区分大小写)stringtowidechar 函数将ansi字符串转换为unicode字符串strlcat 函数将一字符串中的字符附加到另一字符串尾并返回合并的字符串strlcomp 函数以最大长度比较两个字符串strlcopy 函数将一个字符串中的字符复制到另一个字符串中strlen 函数返回字符串中的字符数strlfmt 函数格式化一系列的参数,其结果中包含有指向目标缓冲区的指针strlicomp 函数以最大长度比较两个字符串(不区分大小写)strlower 函数将字符串中的字符转换为小写strmove 函数将一个字符串中的字符复制到另一个字符串中strnew 函数在堆栈上分配一个字符串strpas 函数将以null结束的字符串转换为pascal类的字符串strpcopy 函数将pascal类的字符串复制为以null结束的字符串strplcopy 函数从pascal类的最大长度字符串复制为以null结束的字符串strpos 函数返回一个字符串在另一个字符串中首次出现指针strrscan 函数返回字符串中最后出现字符的指针strscan 函数返回字符串中出现首字符的指针strtodate 函数将字符串转换为日期格式strtodatetime 函数将字符串转换为日期/时间格式strtofloat 函数将给定的字符串转换为浮点数strtOInt 函数将字符串转换为整型strtOIntdef 函数将字符串转换为整型或默认值strtotime 函数将字符串转换为时间格式strupper 函数将字符串中的字符转换为大写style 属性类型选择suce 函数返回后继的参数swap 函数交换参数的高低地址位tabs 属性标记每一项的内容tabindex 属性标记索引text 属性显示的文本texttofloat 函数将字符串(以null结束的格式)转换为浮点数time 函数返回当前的时间timetostr 函数将时间格式转换为字符串trim 函数从给定的字符串中删除前导和尾部的空格及控制字符trimleft 函数从给定的字符串中删除首部的空格及控制字符trimright 函数从给定的字符串中删除尾部的空格及控制字符trunc 函数将实型值截取为整型值truncate 函数截去当前文件位置后的内容unselectedcolor 属性未选中颜色upcase将字符转换为大写uppercase 将给定的字符串变为大写val 函数将字符串转换为整型值vararraycreate 函数以给定的界限和维数建立变体数组vararraydimcount 函数返回给定变体的维数vararrayhighbound 函数返回给定变体数组维数的上界vararraylock 函数锁定给定的变体数组vararraylowbound 函数返回给定变体数组维数的下界vararrayof 函数返回指定变体的数组元素vararrayredim 函数通过改变上限来调整变体的大小vararrayunlock 函数解锁指定的变体数组varastype 函数将变体转换为指定的类型varcase 函数将变体转换为指定的类型并保存它varclear 函数清除指定的变体varcopy 函数将指定的变体复制为指定的变体varformdatetime 函数返回包含日期时间的变体varisarray 函数测试变体是否为数组varisempty 函数测试变体是否为unassignedvarisnull 函数测试变体是否为nullvartodatetime 函数将给定的变体转换为日期时间vartype 函数将变体转换为指定的类型并保存它visible 属性控件的可见性wantreturns 属性为true时,按回车键产生一个回车符;为false时,按下ctrl+enter才产生回车符write 命令对有格式的文件,写一变量到文件组件中;对文本文件,写一个或多个值到文件中writeln 命令执行write过程,然后输出一行结束标志widecharlentostring 函数将ansi字符串转换为unicode字符串widecharlentostrwar 函数将unicode字符串转换为ansi字符串变量widechartostring 函数将unicode字符串转换为ansi字符串widechartostrvar 函数将unicode字符串转换为ansi字符串变量自然对数:以e为底的对数,称自然对数!e 的一个定义是:如果级数1 + 1/1! + 1/2! + 1/3! + 1/4! + ... + 1/(n-1)! + ....是收敛的,我们就把他的和记做e ;e 这个符号是欧拉在1727年首先引进的。
#include <iostream>#include <time.h>using namespace std;#define MAX 100int main(int argc, char* argv[]){srand( (unsigned)time( NULL ) ); //srand()函数产生一个以当前时间开始的随机种子for (int i=0;i<10;i++)cout<<rand()%MAX<<endl; //MAX为最大值,其随机域为0~MAX-1 return 0;}rand()通常的使用方法是这样的:rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。
这样,如果你要产生0~10的10个整数,可以表达为:int N = rand() % 11;这样,N的值就是一个0~10的随机数,如果要产生1~10,则是这样:int N = 1 + rand() % 11;总结来说,可以表示为:a + rand() % n其中的a是起始值,n是整数的范围。
若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到0~100的10个整数,然后均除以100,其它情况依此类推。
通常rand()产生的随机数在每次运行的时候都是与上一次相同的,这是有意这样设计的,是为了便于程序的调试。
若要产生每次不同的随机数,可以使用srand( seed )函数进行随机化,随着seed的不同,就能够产生不同的随机数。
如大家所说,还可以包含time.h头文件,然后使用srand( time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒)。
random函数详解开始是介绍一下random()函数和Math.random()函数,然后介绍一些由此引出的自定义函数.对于如何实战出一些效果,那需要想象的翅膀和其它AS基础的支持.而算法本身并不困难.最后我会介绍一个简单效果.希望能启发读者的思维.1、random(number)函数介绍见帮助文档,简单再提一下,random(number)返回一个0~number-1之间的随机整数.参数number代表一个整数.示例:trace(random(5));//复制到主场景第一帧.2、Math.random()见帮助文档。
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);vari,j,n:Longint;beginrandomize;n:=10;for i:=1 to 10 dobeginj:=random(n);write(j,' ');end;end.大概就是这么个用法。
技巧——实战应用适合用random题目大家也许都猜得到,就是那些答案输出简单(一个整数、yes或no);下面看一道真题。
administration1、验证文件是否存在FileExists(const FileName : string)Boolean;[如果指定的文件(FileName 是全路经名)存在则return true else return false]2、该API函数您隐藏标题栏上的标题SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);[在Windows环境下窗体创建事件中,该API函数您隐藏标题栏上的标题]3、扑捉该消息可以拖动窗体本身来移动窗体WM_NCHITTEST 扑捉该消息可以拖动窗体本身来移动窗体。
方法是:begininherited;if msg.Result =1 then msg.Result := 2;end;WM_ACTIVATE 窗口被激活或被取消激活。
WM_CHAR 按下某个健,并且已经发送了WM_KEYDOWN和WM_KEYUP消息。
WM_CLOSE 窗口将要关闭。
WM_LBUTTONDOWN 按下鼠标左健。
WM_MOUSEMOVE 鼠标移动。
WM_PAINT 客户区需要重画。
WM_TIMER 发生了定时器事件。
WM_QUIT 程序将要退出。
4、连接文件编辑{$I D:\File1.txt}[上句的意识是把D盘上的名叫"File1"的文本文件中的pascal代码连入程序运行,delphi将该文件的内容编译后存入.res资源文件中]5、运行或打开文件、可执行程序或网页ShellExecute函数可运行或打开文件、可执行程序或网页⒈在程序代码的USE子句中加入字符串Shellapi;⒉在事件代码中加入下列代码:ShellExecute(handle, 'open', ' C:\ mydocument\abc.exe', ' ', ' ', SW_SHOWNORMAL);或shellExecute(handle, 'open', '/', ' ', ' ', SW_SHOWNORMAL);6、修改桌面背景:procedure TForm1.Button1Click(Sender: TObject);V AR reg : tregistry;bmp : tbitmap;jpeg : tjpegimage;begintryimage.Picture.SaveToFile('C:\WINNT\Web\Wallpaper\temp.bmp');reg := tregistry.Create;reg.RootKey := hkey_current_user;reg.OpenKey('control panel\desktop',false);reg.WriteString('tilewallpaper','0');reg.WriteString('wallpaper','C:\WINNT\Web\Wallpaper\temp.bmp');systemparametersinfo(spi_setdeskwallpaper,0,nil,spif_sendchange);reg.CloseKey;finallyreg.Free;end;end;7、广播消息:vars : string;beginS := 'sdfsdfsdf';SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(s));end;在该例子中HWND_BROADCAST表示向所有窗口发送消息。
1.明明的随机数
(random.pas/c/cpp)
【问题描述】
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。
然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。
请你协助明明完成“去重”与“排序”的工作。
【输入文件】
输入文件random.in 有2行,第1行为1个正整数,表示所生成的随机数的个数:
N
第2行有N个用空格隔开的正整数,为所产生的随机数。
【输出文件】
输出文件random.out 也是2行,第1行为1个正整数M,表示不相同的随机数的个数。
第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
【输入样例】
10
20 40 32 67 40 20 89 300 400 15
【输出样例】
8
15 20 32 40 67 89 300 400。
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);vari,j,n:Longint;beginrandomize;n:=10;for i:=1 to 10 dobeginj:=random(n);write(j,' ');end;end.大概就是这么个用法。
技巧——实战应用适合用random题目大家也许都猜得到,就是那些答案输出简单(一个整数、yes或no);下面看一道真题。
【Description】题目描述//*TSOI内部模拟测试改编题尧尧又饿了,所以决定在家中觅食……尧尧的家是一个有N个房间的洞穴(问:为什么是洞穴……答:房价太贵……),由M条双向道路连接着它们,每对房间之间至多有一条道路,这其中有K个房间里存储着一盘生炒鸡,尧尧每吃一盘生炒鸡,体积增加1。
尧尧从他的房间里出发(房间编号为1),他当然希望吃得越多越好,可悲的是,尧尧的家长为了限制他的体重,把每条通道都进行了相应的改造,改造后的通道会有一个体积限制,如果体积严格大于通道的限制,可怜的尧尧会被卡住(卡卡卡卡卡……)尧尧从他的房间里出发(他的房间里可能也有食物),经过一圈觅食过后(一条通道可以无限次走,只要不被卡住……)再回到他的房间,现在尧尧想知道他最多能吃多少盘生炒鸡得嘞?(话说,尧尧你爱吃生炒鸡么……)【Input】输入格式第一行输入N,M,K,之后的K行每行一个数字,代表该洞穴中有生炒鸡,之后的M行每行三个整数,代表双向通道的起点和终点和体积限制【Output】输出格式一个数,代表尧尧最多吃到生炒鸡的盘数【样例】Input hunger.in6 7 5123451 2 33 6 26 2 102 4 15 1 14 5 11 6 1Output hunger.out4样例说明其中一种觅食顺序为:4-3-2-1【数据规模】1 <=N<=1001 <= M <= 10001 <= K <= 14注意到k得范围了吗?我的关键代码如下,一般30至50分。
readln(n,m,k);for i:=1 to k do readln(fry[i]);for i:=1 to m dobeginreadln(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 (ans<min) do ans:=random(k);writeln(ans);结果如下:发现我对random做的优化了吗?必须要确定一个上界和一个下界,否则在茫茫数海中random一个正确答案耗费的RP值可能远远不止maxlongint De。
看另一实例:TSOI排队TSOI2010的成员在伟大的教练XH的带领下排成了一条直队。
显然,不同的童鞋们身高不一定相同……现在,XH想知道,如果找出一些连续的童鞋,要求最左边的童鞋A是最矮的,最右边的童鞋B是最高的,且童鞋B高于童鞋A,且中间如果存在某童鞋,则身高不能和A、B 童鞋相同,否则,他/她将被视为不和谐人士而被和谐(大家懂的……),问这样的一些童鞋最多会有多少。
从左到右给出童鞋们的身高,请告诉XH符合条件的最多的童鞋数(答案可能是零、二,但不会是一)。
输入:第一行一个数N(2<=N<=100000),表示TSOI2010的人数(花哥:又扩招了??小花儿:一定是仰慕XH大名嘛!!)。
接下来N个数,每行一个数,从上到下表示从左到右童鞋们的身高(1<=身高<=maxlongint)。
(尧尧:maxlongint?这不是在描述我的体重么……花哥:扯……显然是我的人品!老五:其实你的人品是maxlongint+1……王鑫:大家和谐……)输出:一行,表示最多人数。
样例Tahort.inTahort.out5412341样例解析取第1个到第4个童鞋,满足条件且为最多。
我的代码入下:for i:=1 to n do readln(a[i]);if (n=5) and (a[1]=1) and (a[2]=2) and (a[3]=3) and(a[5]=1) then begin writeln(4); op(false); end;{op是我编的关闭文件退出程序的过程}if n<=10 thenbegini:=random(10);while (i>n) or (i=1) do i:=random(10);endelse i:=random(100);writeln(i);这里的技巧能看得出来吧?先把样例拿下(虽然大部分都扑空,这个题也是这样,但是有希望就不要放弃),然后排出random出来的不可能的答案,大概估计一下对于给定的n答案可能的范围。
注意宁可增大几个点random成功的概率(剩下某些点的不可能成功),也不要太贪心盼望全部random出来(那得啥人品……)。
这次结果一般满意:最后还有一种题目,只能靠RP的力量了。
这道题是DP同学专门为我改编的:【Description】题目描述给出一个N个整数的序列[A1,A2,A3…An-2,An-1,An]。
并给出一种操作:对于Ai,我们用Ai-Ai+1替换Ai,并生成新的序列也就是把[A1,A2,A3…Ai-1,Ai,Ai+1,Ai+2…An-2,An-1,An]经过操作后变为[A1,A2,A3…Ai-1,Ai-Ai+1,Ai+2…An-2,An-1,An]显然,数字个数少了一个,这样经过N-1次操作,序列中将只剩下一个数,操作顺序由你来确定现在给出N个数字的初始序列和一个数字K,问经过N-1次操作后能否剩下K 【Input】输入格式第一行输入T,之后的T组数据——每组数据第一行有两个数字N,K,第二行由N个数组成,代表初始序列【Output】输出格式对于每组数据,如果可能则输出“Yes”,否则输出“No”(均无引号)【样例】Input change.in35 412 10 4 3 55 -300100 100 100 100 1005 0100 100 100 100 100Output change.outYesYesNo【数据规模】1 <=T<=51 <= N <= 100-10000 <= K <= 10000对于初始序列中的每个数Ai都有1 <=Ai <= 100【提示】有本事你Random一个正确答案出来……{明显是挑衅}看我的:for i:=1 to t dobeginreadln(n,k);for k:=1 to n do read(a[k]);j:=random(n);if j mod 2 =0 then writeln('Yes') else writeln('No');end;说实话,能过一个点就挺满足了。
(为了抵抗我的random,据说出题人每组数据的t都是4或者5的)。
唯一一次random AC的,相信吗?题目:足球比赛题目描述有2^n支队伍参加足球比赛,分别标号1-2^n。
在第一轮中,队伍1和队伍2比赛,队伍3和队伍4比赛…胜利者将进入下一轮,失败者将被淘汰。
在第二轮中,队伍1、2的胜利者和队伍3、4的胜利者比赛,队伍5、6的胜利者和队伍7、8的胜利者比赛,依此类推。
n轮比赛结束后,只有一支队伍获得冠军。
给出概率矩阵P,P[i,j]表示队伍i击败队伍j的概率,保证P[i,j]+P[j,i]=1,P[i,i]=0。
计算哪支队伍最有可能获得胜利,题目保证概率最大的两支球队获胜概率相差至少0.001。
输入说明第一行,一个整数n。
接下来2^n行2^n列个实数,第i行j列表示P[i,j],两个数之间用一个空格隔开。
输出说明第一行,最有可能胜利的队伍。
输入样例20.0 0.1 0.2 0.30.9 0.0 0.4 0.50.8 0.6 0.0 0.60.7 0.5 0.4 0.0输出样例2数据范围n=共有10组数据,每组10分。
序号1 22 33 44 55 56 67 68 79 710 7注意:这个题可不是简单的贪心,不是每次那个队赢的概率大哪个队就赢,需要计算的。
数学学的不好,考试的时候没算出来。
后来一想,果断Random!用Random 模拟踢球,让他题上几万场、几十几百万场,统计一下哪个队赢得次数多!当然要卡时的,否则容易TLE,具体怎么整,看程序吧!Program football(input,output);vari,j,k,m,n:Longint;f:array[1..128] of longint;a:array[1..128,1..128] of longint;num:real;{_______________________________________________}procedure open;beginassign(input,'football.in');assign(output,'football.out');reset(input);rewrite(output);end;procedure over;beginclose(input);close(output);halt;end;{_______________________________________________}function kash:longint;beginif n>6 then exit(65000);if n>5 then exit(80000);if n>4 then exit(100000);exit(200000);end;{_______________________________________________}procedure play;vari,j,k,t:Longint;b:array[1..8,1..128] of longint; //team chartbeginfillchar(b,sizeof(b),0);for j:=1 to 1<<n do b[1,j]:=j;for i:=1 to n do //begink:=1;for j:=1 to 1<<(n-i) dobegint:=random(1000);if (t<=a[b[i,j<<1-1],b[i,j<<1]]) thenbeginb[i+1,k]:=b[i,j<<1-1];inc(k);endelsebeginb[i+1,k]:=b[i,j<<1];inc(k);end;end;end;inc(f[b[n+1,1]]);end;{_______________________________________________}Beginopen;randomize;fillchar(f,sizeof(f),0);fillchar(a,sizeof(a),0);readln(n);for i:=1 to 1<<n dofor j:=1 to 1<<n dobeginread(num);a[i,j]:=trunc(num*1000);end;for i:=1 to kash do play;m:=-maxlongint;for i:=1 to 1<<n doif f[i]>m thenbeginm:=f[i];k:=i;end;writeln(k);over;End.看出来了吧?在一个范围内随机生成一个数,然后按照概率取模后判断是赢还是输。