帕秋莉·诺蕾姬 (Standard IO)
Description
在幻想鄉,帕秋莉·諾蕾姬是以宅在圖書館聞名的魔法使。這一天帕秋莉又在考慮如何加強魔法咒語的威力。帕秋莉的魔法咒語是一個僅有大寫字母組成的字符串,我們考慮從’A’到’Z’分別表示0到25的數字,于是這個魔法咒語就可以看作一個26進制數。帕秋莉通過研究發現,如果一個魔法咒語所代表的數能夠整除10進制數M的話,就能夠發揮最大的威力。若當前的魔法咒語并不能整除M,帕秋莉只會將其中兩個字符的位置交換,盡量讓它能夠被M整除,當然由于某些咒語比較特殊,無論怎么改變都不能達到這個目的。請你計算出她能否只交換兩個字符就讓當前咒語被M整除。(首位的’A’為前導0)
Input
第1行:1個字符串,長度不超過L。
第2行:1個正整數,M
Output
第1行:用空格隔開的2個整數,輸出時先輸位置靠前的那個。
如果存在多種交換方法,輸出字典序最小的,比如1 3和1 5都可以達到目的,就輸出1 3;1 3和2 4都行時也輸出1 3。注意字符串下標從左到右依次為1到L開始。如果初始魔法咒語已經能夠整除M,輸出”0 0”;若無論如何也不能到達目的輸出”-1 -1”。
題解
先預處理出26的0至2000的次方,因為題目問是否能整除M,所以可以在預處理時mod M。然后暴力每一種交換情況,即可。
代碼
vars:ansistring;l,n:longint;a,f:array [0..2001] of longint; procedure init; vari,j,t:longint; beginreadln(s);readln(n);l:=length(s);a[0]:=1;for i:=1 to 1999 doa[i]:=(a[i-1]*26) mod n;for i:=1 to l dobeginf[i]:=((ord(s[i])-65)*a[l-i]) mod n;f[0]:=(f[0]+f[i]) mod n;end;if f[0]=0 thenbeginwrite('0 0');halt;end; end;procedure main; vari,j,t,x,y:longint; beginfor i:=1 to l-1 dobeginx:=ord(s[i])-65;for j:=i+1 to l dobeginy:=ord(s[j])-65;t:=((x-y)*a[l-j]+(y-x)*a[l-i]) mod n;if (f[0]+t) mod n=0 thenbeginwrite(i,' ',j);halt;end;end;end; end;begininit;main;write('-1 -1'); end.轉載于:https://www.cnblogs.com/zyx-crying/p/9319608.html
總結
以上是生活随笔為你收集整理的帕秋莉·诺蕾姬 (Standard IO)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关情纸尾-----UIKit基础--QQ
- 下一篇: 二叉树习题