description
在幻想鄉,帕秋莉
·諾蕾姬是以宅在圖書館聞名的魔法使。這一天帕秋莉又在考慮如何加強魔法咒語的威力。帕秋莉的魔法咒語是乙個僅有大寫字母組成的字串,我們考慮從
』a』到
』z』分別表示0到
25的數字,於是這個魔法咒語就可以看作乙個
26進製數。帕秋莉通過研究發現,如果乙個魔法咒語所代表的數能夠整除
10進製數
m的話,就能夠發揮最大的威力。若當前的魔法咒語並不能整除
m,帕秋莉只會將其中兩個字元的位置交換,盡量讓它能夠被
m整除,當然由於某些咒語比較特殊,無論怎麼改變都不能達到這個目的。請你計算出她能否只交換兩個字元就讓當前咒語被
m整除。
(首位的
』a』為前導
0)input
第
1行:1個字串,長度不超過l。
第2行:1
個正整數,
moutput
第
1行:用空格隔開的
2個整數,輸出時先輸位置靠前的那個。
如果存在多種交換方法,輸出字典序最小的,比如
1 3和
1 5都可以達到目的,就輸出
1 3;
1 3和
2 4都行時也輸出
1 3。注意字串下標從左到右依次為1到
l開始。如果初始魔法咒語已經能夠整除
m,輸出
」0 0」
;若無論如何也不能到達目的輸出
」-1 -1」
。sample input
patchouli
16sample output
4 9dataconstraint
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
分析:首先預處理出26的0~l次方,然後求出這個26進製數的10進製值(要取模)。然後我們列舉更換的二個位置,然後交換。它的大小變化為
(a[j]-a[i])*26^(l-i)+(a[i]-a[j])*26^(l-j)
當它的值與本來的值和取模後為0即為解。
程式:
var
s:ansistring;
m,l,t,x:int64;
power,a:array [1..1001] of int64;
i,j:longint;
begin
readln(s);
readln(m);
l:=length(s);
a[l]:=ord(s[l])-65;
power[l]:=1;
t:=a[l];
for i:=l-1
downto1do
begin
a[i]:=ord(s[i])-65;
power[i]:=(power[i+1]*26) mod m;
t:=(t+a[i]*power[i]) mod m;
end;
if t=0
then
begin
writeln('0 0');
exit;
end;
for i:=1
to l-1
dofor j:=i+1
to l do
begin
x:=((a[j]-a[i])*power[i]+(a[i]-a[j])*power[j]) mod m;
if (t+x) mod m=0
then
begin
writeln(i,' ',j);
exit;
end;
end;
writeln('-1 -1');
end.
Luogu P4910 帕秋莉的手環
帕秋莉是蕾公尺莉亞很早結識的朋友,現在住在紅魔館地下的大圖書館裡。不僅擅長許多魔法,還每天都會開發出新的魔法。只是身體比較弱,因為哮喘,會在詠唱符卡時遇到麻煩。她所用的屬性魔法,主要是生命和覺醒的 木 變化和活動的 火 基礎和不動的 土 果實和豐收的 金 寂靜和淨化的 水 機動和攻擊的 日 被動和防...
洛谷P4915 帕秋莉的魔導書
帕秋莉有乙個巨大的圖書館,裡面有數以萬計的書,其中大部分為魔導書。魔導書是一種需要鑰匙才能看得懂的書,然而只有和書寫者同等或更高熟練度的人才能看得見鑰匙。因此,每本魔導書都有它自己的等級 a i 同時它也有自己的知識程度為 w i 現在我們想要知道,乙個等級為 b i 的生物 可以從這些魔導書中得到...
洛谷 P4910 帕秋莉的手環 矩陣乘法
傳送門 帕秋莉有乙個手環,有兩種珠子可以組成手環,乙個為金屬性,乙個為木屬性,當與金珠子相鄰的珠子都會發出金色 現在問我們有多少種方案能使得整個手環呈現金色 我們先手玩一般情況下我們的放置方案可行的個數 n1 2345 金123 58木1 1235 不難看出這便是斐波那契數列 但因為這乙個環,所以我...