打卡信奥刷题(3190)用C++实现信奥题 P8085 [COCI 2011/2012 #4] KRIPTOGRAM
P8085 [COCI 2011/2012 #4] KRIPTOGRAM题目描述现有一段明文和一部分密文。明文和密文都由英文单词组成且密文中的一个单词必然对应着明文中的一个单词。求给出的密文在明文中可能出现的最早位置。输入格式第一行若干个英文单词和一个 $表示明文。第二行若干个英文单词和一个 $表示密文。每行末尾的 $ 用于表示该行结束。数据保证没有多个 $ 出现在同一行的情况。输出格式输出密文在明文中可能出现的最早位置即密文的第一个单词在明文中可能出现的最早位置。输入输出样例 #1输入 #1a a a b c d a b c $ x y $输出 #13输入输出样例 #2输入 #2xyz abc abc xyz $ abc abc $输出 #22输入输出样例 #3输入 #3a b c x c z z a b c $ prvi dr prvi tr tr x $输出 #33说明/提示【数据规模与约定】对于100 % 100\%100%的数据明文和密文所对应字符串的长度不超过10 6 10^6106输入的单词均由小写字母组成。【提示与说明】题目译自 COCI 2011-2012 CONTEST #4Task 6 KRIPTOGRAM。本题分值按 COCI 原题设置满分140 140140。C实现#includebits/stdc.h#defineup(l,r,i)for(intil,END##ir;iEND##i;i)#definedn(r,l,i)for(intir,END##il;iEND##i;--i)usingnamespacestd;typedeflonglongi64;constintINF2147483647;constintMAXN1e63;intL1[MAXN],R1[MAXN];intL2[MAXN],R2[MAXN];intA[MAXN],B[MAXN],n,m;typedefunsignedintu32;typedefunsignedlonglongu64;constu64 BAS13331;u64 H[MAXN],P[MAXN];mapstring,intM;intmain(){string t;while(cintt!$){R1[M[t]]n,L1[n]M[t],M[t]n;}M.clear();while(cintt!$){R2[M[t]]m,L2[m]M[t],M[t]m;}for(inti1;in;i)if(!R1[i])R1[i]INF;for(inti1;im;i)if(!R2[i])R2[i]INF;for(inti1;in;i)A[i]L1[i]?i-L1[i]:-1;for(inti1;im;i)B[i]L2[i]?i-L2[i]:-1;u64 h00,h0;P[0]1;for(inti1;im;i)P[i]P[i-1]*BAS;for(inti1;im;i)h0h0*BASB[i],hh*BASA[i];if(hh0)printf(%d\n,1),exit(0);for(intim1;in;i){hh*BASA[i],hh-A[i-m]*P[m];if(R1[i-m]i){hh-A[R1[i-m]]*P[i-R1[i-m]];A[R1[i-m]]-1;hhA[R1[i-m]]*P[i-R1[i-m]];}elseif(R1[i-m]n)A[R1[i-m]]-1;if(hh0)printf(%d\n,i-m1),exit(0);}return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2568871.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!