144 条题解
-
0我不是你 LV 8 @ 2009-07-16 10:27:57
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
1次AC -
02009-07-08 15:10:39@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msprogram zk;
var
shu:array [1..30] of boolean;
a,b,c,d,i,j,m,n,no:longint;
g:array [0..30] of int64;
begin
readln(n,m);
m:=m-1;
fillchar(shu,sizeof(shu),true);
g[0]:=1; no:=n-1;
for i:=1 to n do
g[i]:=g*i;
c:=0;
for i:=1 to n do
begin
d:=0; a:=0;
repeat
a:=a+1;
if shu[a]=true then d:=d+1;
until d=m div g[no]+1;
write(a,' ');
shu[a]:=false;
m:=m mod g[no];
no:=no-1;
end;
end. -
02009-06-14 14:07:47@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msToo easy! 一次秒杀
-
02009-06-09 22:09:20@
program qpl69;
var
m,n,s:integer;
aa,bb:array[1..50] of integer;
procedure try(a:integer);
var
i:integer;
begin
if a>n then
begin
s:=s+1;
if s=m then
begin
for i:=1 to n do
write(aa[i],' ');
halt;
end;
end
else
begin
for i:=1 to n do
if a=1 then
begin
aa[a]:=i;
bb[i]:=1;
try(a+1);
bb[i]:=0;
end
else
begin
if bb[i]=0 then
begin
aa[a]:=i;
bb[i]:=1;
try(a+1);
bb[i]:=0;
end;
end;
end;
end;
begin
read(n,m);
s:=0;
try(1);
end.
请大家看看什么问题
在测试时没超时,答案错了。
因为不知道测试数据,所以不知道怎么改。
大侠们帮下啊~~ -
02009-05-29 10:47:55@
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msprogram p1092;
const a:array[1..21] of byte=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,0);
var n,m,j,b,v,c:int64; i:integer;
q:int64;
function cheng(ewe:int64) :int64;
begin q:=1;
if ewe=0 then cheng:=1
else
begin
for i:=1 to ewe do
q:=q*i;
cheng:=q;
end; end;
procedure pailie(var x,y:int64);
begin
if y>1 then
begin
q:=cheng(y-1);
b:=x mod q;
if b=0 then
begin
c:=x div q;
write(a[c],' ');
for i:=c to 20 do
a[i]:=a;
for i:= y-1 downto 1 do
write(a[i],' ')end
else
begin
c:=(x div q)+1;
write(a[c],' ');
for i:=c to 20 do
a[i]:=a;
dec(y);x:=x mod q ; pailie(x,y); end; end;
end;
begin
read(n,m);
pailie(m,n);end.
小弟不才,看不懂康托展开,但自己摸索出一个递推关系式,各位非大牛有兴趣可以看看。 -
02009-05-14 21:29:19@
本题不能爆搜,剪枝也超时.必须使用数学方法.
按照全排列数(n!)作为除数进行计算, 商为升值(即在原先顺序排列基础上需要增加多少, 1235xxx, 为增加1), 余数作为被除数递归运算,直到余数为零, 同时处理位也从第一位开始往后扫描.
对于余数为零时,对剩余的数进行逆序输出.注意逆序输出时应将商减一(即一个序列的顺序到逆序是一个全排列数)
注意使用哈希表来表示该数是否被使用. -
02009-05-13 22:40:11@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms终于AC了,康拓展开!
-
02009-05-12 10:08:41@
超短代码,为VIJOS省点KB!!!!!!!!!!!!
纯数学问题,不过要注意细节!!!!!!!!!!!!编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar i,j,n:byte;
k,m:int64;
a:array[1..20] of byte;
c:array[2..20] of int64;
begin
readln(n,m);
c[2]:=1;
for i:=2 to n-1 do
c:=c[i]*i;
for i:=1 to n do a[i]:=i;
for i:=n downto 2 do begin
k:=(m-1) div c[i]+1;
m:=m-(k-1)*c[i];
write(a[k],' ');
for j:=k to i-1 do
a[j]:=a[j+1];
end;
write(a[1]);
end. -
02009-04-29 23:37:17@
交了5次,汗,结果发现是没有fillchar。。。。。
纯数学方法,排列组合基础知识,请广大用户放心使用.....
---|---|---|---|---|---|---|---|---|---|
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar n:int64;m:longint;
ans:array[0..20]of longint;
wll:array[0..20]of int64;
procedure init;
var i:longint;
begin
readln(m,n);
wll[0]:=1;
wll[1]:=1;
for i:=2 to m do
begin
wll[i]:=i*wll;
end;
end;
procedure find;
var k,time,q,now:int64;i,j:longint;
v:array[0..20]of boolean;
begin
fillchar(v,sizeof(v),0);
for i:=m downto 1 do
begin
k:=wll;
time:=0;
now:=0;
while now -
02009-04-28 20:23:23@
program vijos_nimo;
var
n,m:int64;
i,j,t:integer;
jc:array[0..20] of int64;
num:array[0..20] of integer;
first:boolean;
begin
assign(input,'pailie.in');
reset(input);
assign(output,'pailei.out');
rewrite(output);
first:=true;
readln(n,m);
for i:=0 to n-1 do
num[i]:=i+1;
jc[0]:=1;
jc[1]:=1;
for i:=2 to n-1 do
jc[i]:=jc*i;for i:=1 to n do
begin
t:=(m-1) div jc[n-i];
if first then
begin
first:=false;
write(num[t]);
end
else
write(' ',num[t]);
for j:=t to n-i do
num[j]:=num[j+1];
m:=((m-1) mod jc[n-i])+1;
end;
writeln;
close(input);
close(output);
end.
神奇的算法,谁能告诉我什么意思啊,我问了别人啊 -
02009-04-19 16:12:07@
深搜的话超时3个
我们不妨举个例子(给像我一样的菜鸟提示下,大牛免看)
4的全排列
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 22 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 13 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 14 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
注意到第一个数字不同的可以分成4组 每组有3!(阶乘)种排列
再细分:刚才分的4组中 每组第二位相同的有2!种……以此类推
——这就是规律之一注意 n!可以是很大的:20!=2432902008176640000自己看着办
另外 请大牛讲下康托展开
-
02009-04-10 08:23:36@
var
a:packed array[1..10000] of integer;vis:packed array[1..10000] of boolean;n,m,s:longint;
procedure print;
var i:longint;
begin
for i:=1 to n-1 do write(a[i],' ');
writeln(a[n]);
end;
procedure search(depth:longint);
var i:longint;
begin
if depth>n then begin s:=s+1;if s=m then begin print;halt;end;exit;end;
for i:=1 to n do
if not vis[i] then begin
a[depth]:=i;
vis[i]:=true;
search(depth+1);
vis[i]:=false;end;
end;
begin
s:=0;fillchar(vis,sizeof(vis),false);readln(n,m);search(1);
end.
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:运行超时...
├ 测试数据 06:运行超时...
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:运行超时...
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:62 有效耗时:0ms各位大牛,请看一下,为什么会超时呢?????
-
02009-03-28 17:10:43@
program p1092;
var i,j:longint;
k,m,n,t,d:int64;
a:array[0..21] of int64;
f:array[0..21] of integer;begin
readln(n,m);
a[0]:=1;
for i:=1 to n do a[i]:=a*i;k:=n+1;
repeat
dec(k);
d:=a[k-1];
t:=(m-1) div d+1;
m:=(m-1)mod d+1;i:=0; j:=0;
repeat
inc(i);
if f[i]=0 then inc(j);
until j=t;
write(i,' ');
f[i]:=1;
until k=3;i:=0; j:=0;
repeat
inc(i);
if f[i]=0 then inc(j);
until j=m;
write(i,' ');
f[i]:=1;i:=0; j:=0;
repeat
inc(i);
if f[i]=0 then inc(j);
until j=1;
write(i,' ');
f[i]:=1;
end. -
02009-02-26 19:35:41@
program p1092;
var
nn,n,i,j,k:longint;
m:int64;
f:array[1..20] of int64;
a,b:array[1..20] of integer;
p:array[1..20] of boolean;
begin
readln(nn,m);
n:=nn;
f[1]:=1;
fillchar(p,sizeof(p),1);
for i:=2 to n-1 do
f[i]:=f*i;
for i:=1 to n do
b[i]:=i;
for i:=1 to n-1 do
begin
k:=(m-1) div f[nn-i]+1;
m:=(m-1) mod f[nn-i]+1;
a[i]:=b[k];
p[a[i]]:=false;
for j:=k to n-1 do
b[j]:=b[j+1];
n:=n-1;
end;
for i:=1 to nn-1 do
write(a[i],' ');
for i:=1 to nn do
if p[i] then writeln(i);
end. -
02009-02-06 21:10:16@
这题什么意思??
比如说
3 1(1~3 这3个自然数的第一种排列)
排列如下
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
所以第一种排列就是1 2 3
这道题其实有规律的
规律? 你把1-4的全排列写一遍 自己找一下吧
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
.......
2 1 3 4
2 1 4 3
.......
.......我的程序如下:
program p1092;
var i,j:longint;
k,m,n,t,d:int64;
a:array[0..21] of int64;
f:array[0..21] of integer;begin
readln(n,m);
a[0]:=1;
for i:=1 to n do a[i]:=a*i;k:=n+1;
repeat
dec(k);
d:=a[k-1];
t:=(m-1) div d+1;
m:=(m-1)mod d+1;i:=0; j:=0;
repeat
inc(i);
if f[i]=0 then inc(j);
until j=t;
write(i,' ');
f[i]:=1;
until k=3;i:=0; j:=0;
repeat
inc(i);
if f[i]=0 then inc(j);
until j=m;
write(i,' ');
f[i]:=1;i:=0; j:=0;
repeat
inc(i);
if f[i]=0 then inc(j);
until j=1;
write(i,' ');
f[i]:=1;
end.编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02009-02-06 20:45:55@
问:这题是什么意思啊?
-
02009-02-03 09:14:50@
成功了·
#include
int a[21],n;
long long b[21],m;
void f(int flag)
{
int i,j;
long long x,y;
for(i=1;i -
02009-05-15 16:59:30@
结合康托展开
Program p1092;
var
nn,n,i,j,k:longint;
m:int64;
f:array[1..20] of int64;
a,b:array[1..20] of integer;
p:array[1..20] of boolean;
begin
readln(nn,m);
n:=nn;
f[1]:=1;
fillchar(p,sizeof(p),1);
for i:=2 to n-1 do
f[i]:=f*i;
for i:=1 to n do
b[i]:=i;
for i:=1 to n-1 do
begin
k:=(m-1) div f[nn-i]+1;
m:=(m-1) mod f[nn-i]+1;
a[i]:=b[k];
p[a[i]]:=false;
for j:=k to n-1 do
b[j]:=b[j+1];
n:=n-1;
end;
for i:=1 to nn-1 do
write(a[i],' ');
for i:=1 to nn do
if p[i] then writeln(i);
end. -
02008-12-16 21:21:30@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:运行超时...
├ 测试数据 06:运行超时...
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:运行超时...
请教大牛,怎么会超时........ -
02008-11-13 18:54:59@
var a:array[1..10000] of longint;
n,max:longint;
m,t,i,k,p,j,z:longint;
procedure input;
var i:integer;
begin
readln(m);
readln(n);
for i:= 1 to m do
a[i]:=i;
end;
begin
input;
for t:= 1 to n do
begin
i:=m;
while ((a[i] < a) and (i >= 2)) do
dec(i);
max:= m;
for k:= i to m do
if ((a[k] > a) and (a[k] < max)) then max:=a[k] ;
for k:= i-1 to m-1 do
for p:= k+1 to m do
if a[k] > a[p] then begin z:=a[k] ; a[k] := a[p] ; a[p] := z ;end;
j:= i -1 ;
while a[j] max do
inc(j);
for k:= j downto i-1 do
a[k]:=a[k-1];
a:=max;
end;
for k:= 1 to m do
write(a[k]:2);
readln;
readln;
end.这个算法过那个火星人手指的就过了...怎么搞的..只对了1个