2554. 【NOIP2011模拟9.7】帕秋莉·诺蕾姬 (Standard IO)

来源:互联网 发布:java web license 编辑:程序博客网 时间:2024/06/05 14:04

2554. 【NOIP2011模拟9.7】帕秋莉·诺蕾姬 (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”。

Sample Input

PATCHOULI
16

Sample Output

4 9

Hint

【数据范围】
  对于30%的数据:1 <= L <= 10, 1 <= M<= 100
  对于50%的数据:除前面30%外,1 <= L <= 500, M = 5或25或26
对于100%的数据:1 <= L <= 2,000, 1 <= M<= 200,000
 

思路

暴力,在会爆的地方加上一个mod就好了,同于原理,你懂得。

换位就用那两个数换换,再算一次,怎么优化,自己想把

const maxn=20000;var a,b:array[0..maxn] of longint; i,j,n,m,o,ans:longint; s:ansistring;begin readln(s); n:=length(s); readln(m); o:=1; fori:=n downto 1 do begin a[i]:=o*(ord(s[i])-65); b[i]:=o; o:=(o*26) mod m;  ans:=ans+a[i];  ifo=0 then o:=m; end;  ifans mod m=0 then begin writeln('0 0'); halt; end;  fori:=1 to n do  forj:=i+1 to n do  begin   o:=ans-(a[j]-(a[i] div b[i])*b[j])-(a[i]-(a[j] div b[j])*b[i]);    ifo mod m=0 then    begin     writeln(i,'',j);    halt;    end;  end;  writeln('-1 -1');end. 

1 0