信息学-noip2008提高组第四题twostack_第1页
信息学-noip2008提高组第四题twostack_第2页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四题以下saybi的题 s2都为空,q1n个数(n<=1000),1~n的某个排列.a操作,q1s1的栈顶b操作,s1q1q2的队列尾c操作,q1s2的栈顶d操作,s2q1q2的队列尾请判断,是否可以经过一系列操作之后,使得q2中依次着1,2,3,…,n.如果可以,求出字典序这道题的错误做法很多,错误做法却能得满分的也很多,这里就不多说了.直接切入正题,就是.个图成二分图.q1[i]q1[j]来说,它们不能压入同一个栈中的充要条件是什么(注意没有必要使它们同时存在于同一个栈中,只是压入了同一个栈).实际上,p是:存在一个k,i<j<kq1[k]<q1[i]<q1[j].首先证明充分性,即如果满足条件p,那么这两个数一定不能压入同一个栈.这个结论很显然因为q1[k]比q1[i]和q1[j]都小,所以很显然,当q1[k]没有被弹出的时候,另外两个数也都不能被弹出(q21,2,3,…,n了).而之后,无论其它的数字在什么时候被弹出,q1[j]总是会在q1[i]之前弹出.而q1[j]>q1[i],这显接下来证明必要性.也就是,如果两个数不可以压入同一个栈,那么它们一定满足条件p.这里来证明它的逆否命题,也就是"p,那么这两个数一定可以压入同一个栈."不满足条件p有两种情况:一种是对于任意i<j<k且q1[i]<q1[j],q1[k]>q1[i];另一种是对于任意第一种情况下,很显然,q1[k]被压入栈的时候,q1[i]已经被弹出栈.那么,q1[k]q1[j]产生任何影响(这里可能有点乱,因为看起来,当q1[j]第二种情况下,可以发现这其实就是此时只考虑检查是否有解,所以只要O(n)检查出这个图是不是二分图,就可以得知是否有号最小的结点,将它染色为1并从它开始DFS染色,直到所有结点都被染色为止.这样,就还有一点小问题,就是如果对于数对(i,j),kp1[k]MRain:程序是写的(懒得按照格式输出了),已经过了所有标准数据.vara,b,head,next,point,color:array[0..2001]oflongint;s:array[1..2,0..1000]oflongint;procedurebadend;procedureaddedge(a,b:longint);vart:longint;ifhead[a]=0thenwhilenext[t]<>0doproceduredfs(now:longint);vart:longint;whilet<>0doifcolor[point[t]]=0then

ifcolor[point[t]]=color[now]thenbadend;fori:=1tonfori:=ndownto1doifa[i]<b[i]thenfori:=1tonforj:=i+1tonif(b[j+1]<a[i])and(a[i]<a[j])thenfori:=1tonifcolor[i]=0thenfori:=1tondoifcolor[i]=1thenwrite('a')write('cwhile(s[1,s[1,0]]=last)or(s[2,s[2,0]]=la

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论