題目描述description佳佳碰到了乙個難題,請你來幫忙解決。
對於不定方程a1+a2+…+ak-1+ak=g(x),其中k≥2且k∈n,x是正整數,g(x)=x^x mod 1000(即x^x除以1000的餘數),x,k是給定的數。我們要求的是這個不定方程的正整數解組數。
舉例來說,當k=3,x=2時,分別為(a1,a2,a3)=(2,1,1)'(1,2,1),(1,1,2)。
輸入輸出格式input/output
輸入格式:
輸入檔案equation.in有且只有一行,為用空格隔開的兩個正整數,依次為k,x。
輸出格式:
輸出檔案equation.out有且只有一行,為方程的正整數解組數。
輸入輸出樣例sample input/output
樣例測試點#1
輸入樣例:
3 2
輸出樣例:
3
說明description
對於40%的資料,ans≤10^16;對於100%的資料,k≤100,x≤2^31-1,k≤g(x)。noi導刊2010提高
t=x^x=g[x]
a1+a2+a3+...+ak=t
插空法 ans=c(k-1,t-1)
ans=(t-1)!/((t-k)!(k-1)!)
=(t-1)*(t-2)*...*(t-k+1)/(k-1)!
先用高精乘求出分子,再用高精除單精得到結果
var x:longint;ans,k:longint;
ii,i,j,xx,l,len:longint;
temp:array[0..1000]of longint;
init1,init2,init3:array[0..10000]of integer;
a,b,c,d:longint;
beginreadln(k,x);
i:=x;
while i>0 do
begin inc(temp[0]);
temp[temp[0]]:=i mod 2;
if i mod 2=1
then i:=(i-1) div 2
else i:=i div 2;
end;
xx:=1;
for i:=temp[0] downto 1 do
if temp[i]=1
then xx:=(((xx mod 1000)*(xx mod 1000)) mod 1000)*(x mod 1000) mod 1000
else xx:=((xx mod 1000)*(xx mod 1000)) mod 1000;
fillchar(init1,sizeof(init1),0);fillchar(init2,sizeof(init2),0);
fillchar(init3,sizeof(init3),0);
a:=xx-1;
b:=xx-k;
c:=k-1;
init1[0]:=1; init1[1]:=1;init2[0]:=1; init2[1]:=1;
init3[0]:=1; init3[1]:=1;
for i:=b+1 to a do
begin for j:=1 to init1[0] do
init1[j]:=init1[j]*i;
l:=init1[0]+5;
for j:=1 to l do
begin init1[j+1]:=init1[j+1]+init1[j] div 10;
init1[j]:=init1[j] mod 10;
end;
while init1[l]=0 do dec(l);
init1[0]:=l;
end;
d:=0;
for ii:=c downto 2 do
begin for i:=init1[0] downto 1 do
begin d:=d*10+init1[i];
init1[i]:=d div ii;
d:=d mod ii;
end;
l:=init1[0];
while init1[l]=0 do dec(l);
init1[0]:=l;
end;
for i:=init1[0] downto 1 do
write(init1[i]);
end.
小明搬家 NOI導刊2010提高(05)
小明要搬家了,大家都來幫忙。小明現在住在第n樓,總共k個人要把x個大箱子搬上n樓。最開始x個箱子都在,但是經過一段混亂的搬運已經亂掉了。最後大家發現這樣混亂地搬運過程效率太低了,於是總結出了提高效率的方法。大家的速度都是每分鐘上 或下 一層樓。所有向上走的人手中都拿乙個箱子,所有向下走的人手中都不拿...
淘汰賽制(NOI導刊2010提高 01)
淘汰賽制 noi導刊2010提高 01 題目描述 淘汰賽制是一種極其殘酷的比賽制度。2n名選手分別標號1,2,3,2 n 1,2 n,他們將要參加n輪的激烈角逐。每一輪中,將所有參加該輪的選手按標號從小到大排序後,第1位與第2位比賽,第3位與第4位比賽,第5位與第6位比賽 只有每場比賽的勝者才有機會...
黑匣子 NOI導刊2010提高(06)
題目描述 black box是一種原始的資料庫。它可以儲存乙個整數陣列,還有乙個特別的變數i。最開始的時候black box是空的 而i等於0。這個black box要處理一串命令。命令只有兩種 add x 把x元素放進blackbox get i加1,然後輸出blackhox中第i小的數。記住 第...