33 条题解
-
1niujinyu LV 10 @ 2022-07-20 15:28:34
program exam; var m,n,k,l,xx,x,s,x1,x2,d:int64; i,j,jj:longint; a,c:array[0..10000] of longint; function pd(a,p,t:int64):int64; var i,j,k,q:int64; begin q:=p; k:=a; pd:=1; while q>0 do begin if q and 1>0 then pd:=pd*k mod t; k:=k*k mod t; q:=q shr 1; end; end; begin readln(k,x); xx:=1; a[1]:=1; s:=pd(x,x,1000); for i:=s-k+1 to s-1 do begin x1:=i; xx:=0; for j:=1 to 10000 do begin a[j]:=a[j]*x1+xx; xx:=a[j] div 10; a[j]:=a[j] mod 10; end; while xx>0 do begin inc(j); a[j]:=xx mod 10; xx:=xx div 10; end; x2:=i+k-s; for jj:=10000 downto 1 do begin c[jj]:=(a[jj]) div x2; if jj>1 then a[jj-1]:=a[jj-1]+a[jj] mod x2*10; end; a:=c; end; l:=10000; while (a[l]=0) and (l>0) do dec(l); for i:=l downto 1 do write(a[i]); end.
-
02016-10-02 20:13:49@
就是求C(g(x)-1,k-1),很容易推,就是用板隔球
两种方法:
第一种可以用杨辉三角(或者组合恒等式)
第二种可以直接求,边乘边约分
无论哪种,都需要快速幂+高精度,别天真地用LL了。。。 -
02016-05-22 09:52:44@
type tt=array [0..50005] of longint;
var
a,b,c:tt;
k,p,n,m,i,l1,l2,l3:longint;
procedure cch;
var i,j,x:longint;
begin
fillchar(c,sizeof(c),0);
for i:=1 to l1 do
begin
x:=0;
for j:=1 to l2 do
begin
x:=x+a[i]*b[j]+c[i+j-1];
c[i+j-1]:=x mod 10;
x:=x div 10;
end;
c[i+l2]:=x;
end;
if (c[l1+l2]<>0) then l3:=l1+l2 else l3:=l1+l2-1;
end;
procedure jy(t:longint);
var i,x:longint;
begin
fillchar(b,sizeof(b),0);
x:=0;
for i:=l1 downto 1 do
begin
x:=x*10+a[i];
b[i]:=x div t;
x:=x mod t;
end;
l2:=l1;
while (b[l2]=0) and (l2>1) do dec(l2);
end;
procedure fj(x:longint);
var i:longint;
begin
fillchar(b,sizeof(b),0);
i:=0;
while (x<>0) do
begin inc(i); b[i]:=x mod 10; x:=x div 10; end;
l2:=i;
end;
procedure jzq(a:tt; l:longint);
var i:longint;
begin
for i:=l downto 1 do write(a[i]);
writeln;
end;
function cky(x,y:longint):longint;
begin
if (y=1) then exit(x);
if (y mod 2=0) then exit(sqr(cky(x,y div 2)) mod 1000)
else exit(sqr(cky(x,y div 2))*x mod 1000);
end;
begin
read(k,p);
n:=cky(p mod 1000,p)-1;
m:=k-1;
a[1]:=1; l1:=1;
for i:=n-m+1 to n do
begin fj(i); cch; l1:=l3; a:=c; end;
for i:=2 to m do
begin jy(i); a:=b; l1:=l2; end;
jzq(a,l1);
end. -
02015-10-16 20:45:05@
program exam;
var m,n,k,l,xx,x,s,x1,x2,d:int64;
i,j,jj:longint;
a,c:array[0..10000] of longint;function pd(a,p,t:int64):int64;
var i,j,k,q:int64;
begin
q:=p;
k:=a;
pd:=1;
while q>0 do
begin
if q and 1>0 then
pd:=pd*k mod t;
k:=k*k mod t;
q:=q shr 1;
end;
end;begin
readln(k,x);
xx:=1;
a[1]:=1;
s:=pd(x,x,1000);
for i:=s-k+1 to s-1 do
begin
x1:=i;
xx:=0;
for j:=1 to 10000 do
begin
a[j]:=a[j]*x1+xx;
xx:=a[j] div 10;
a[j]:=a[j] mod 10;
end;
while xx>0 do
begin
inc(j);
a[j]:=xx mod 10;
xx:=xx div 10;
end;
x2:=i+k-s;
for jj:=10000 downto 1 do
begin
c[jj]:=(a[jj]) div x2;
if jj>1 then
a[jj-1]:=a[jj-1]+a[jj] mod x2*10;
end;
a:=c;
end;
l:=10000;
while (a[l]=0) and (l>0) do dec(l);
for i:=l downto 1 do
write(a[i]);
end. -
02015-10-16 20:26:09@
program aa;
var
i,j,k,l,n,m,g,h:longint;
ans,tot,ii,jj,kk,ll:int64;
a,b,c:array[0..10000]of longint;
procedure moo(x,y,z:longint);
var
i,j:longint; k,l,g:int64;
begin
k:=x;
l:=y;
ans:=1;
while l>0 do
begin
if l and 1=1 then
ans:=(ans*k)mod z;
k:=((k mod z)*(k mod z))mod z;
l:=l div 2;
end;
end;begin
readln(k,n);
moo(n,n,1000);
dec(k);
dec(ans);
a[1]:=1; a[0]:=1;
tot:=1;
for g:=ans downto ans-k+1 do
begin
ii:=0;
for i:=1 to a[0] do
begin
a[i]:=a[i]*g+ii;
ii:=a[i] div 10;
a[i]:=a[i] mod 10;
end;
while ii>0 do
begin
inc(a[0]);
a[a[0]]:=ii mod 10;
ii:=ii div 10;
end;
while (a[a[0]]=0)and(a[0]>0) do dec(a[0]);
end;
c[0]:=a[0];
for g:=k downto 2 do
begin
ii:=0;
for i:=a[0] downto 1 do
begin
c[i]:=(ii*10+a[i]) div g;
ii:=(ii*10+a[i]) mod g;
end;
if ii<>0 then a[1]:=a[1]+ii;
while (c[c[0]]=0)and(c[0]>0) do dec(c[0]);
a:=c;
end;
for i:=c[0] downto 1 do
write(c[i]);
writeln;
end. -
02009-11-01 16:39:01@
编译通过...
├ 测试数据 01:答案正确... 41ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 369ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 306ms
├ 测试数据 09:答案正确... 400ms
├ 测试数据 10:答案正确... 275ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:1391ms
快速幂+高精 -
02009-10-11 16:26:54@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
一次AC 爽
先x快速幂 快速幂似乎写成递归的要好写一些 反正才maxlongint只有31层
快速幂骨架:
function g(x:longint):longint;
begin
if x=1 then
exit(m);
g:=g(x shr 1)*g(x shr 1) mod 1000;
if x and 1=1 then
g:=g*m mod 1000;
end;
然后把A1,A2,A3...AK看成K个盒子 就变成X个球放到K个盒子里的方案数
就是在X-1个空里插K-1个板 因为要正整数解,所以答案就是C(g(x)-1,k-1)
高精即可【筛求1000内素数 然后上下分解质因子相减 最后乘起来】 不用压位 -
02009-10-01 21:08:50@
快速幂取模的代码
function quickpower(c,d:int64):longint;
var ans:int64;
begin
ans:=1;
while d>0 do
begin
if d and 1=1 then ans:=ans*c mod 1000;
c:=c*c mod 1000;
d:=d shr 1;
end;
exit(ans);
end; -
02009-08-14 11:07:09@
g(x)=x^x mod 1000 我居然把它当成平方,害我错了N次,这题就是排列组合+快速幂
-
02009-07-30 18:06:44@
快速幂+dp+高精度+树状数组
程序写得十分猥琐,勉强过了,早知道想个公式套上,不知会好多少 -
02009-06-18 18:36:00@
第101个……
第一问快速幂,第二问简单DP+小优化……
要用高精度!!!!!!!!!!!!!!!!!!!! -
02009-06-13 23:39:28@
Flag Accepted
题号 P1371
类型(?) 数论 / 数值
通过 100人
提交 322次
通过率 31%
难度 2呼,赶上末班车了。。。。。。
-
02009-05-03 12:48:33@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
简单模拟+高精=秒杀! -
02009-04-17 22:29:44@
综合题..
-
02009-02-04 09:57:03@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
我没考虑任何情况,只在开始加了x:=x mod 1000;-次ac!! -
02008-11-06 09:41:23@
显然是(x^x) mod 1000
别听楼上胡扯
-
02008-10-14 20:43:11@
请问
g(x)需要高精吗
是(x^x)mod 1000还是x^(x mod 1000)经过实验是x^(x mod 1000)
且若mod=0则g(x)=1000
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms -
02008-10-03 23:27:57@
orz潇牛
倍增+万进制高精+inline
都能37行 -
02008-09-24 13:30:37@
37行,0msAC
倍增+万进制高精+inline
Ans=C(g(x)-1,k-1) -
02008-09-17 13:57:10@
嗯。。简单的题一定WS。。
算x^n时要么用int64,要么一开始就x=x mod 1000,否则会爆掉