144 条题解
-
0190235047 LV 3 @ 2008-09-18 18:17:25
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms太高兴了··· 1次AC
哈哈···自己弄了个构造法AC···
。。。。。。。。。。 -
02008-09-18 17:48:43@
超时
-
02008-09-17 23:21:18@
20的阶乘开什么了?
QWORD????
我写高精。。。 -
02008-09-14 11:06:51@
汗用了Longint错了N次
-
02008-09-11 22:58:19@
var n,m,i,j,p,t:longword;
a:array[0..20] of qword;
c:array[1..20] of byte;
re:array[0..20] of boolean;begin
readln(n,m); a[0]:=1;
for i:= 1 to n do
begin
a[i]:=1;
for j:= 1 to i do
a[i]:=a[i]*j;
end;
for i:=1 to n do
begin
t:=((m-1)div a[n-i]+1)mod (n-i+1);
if t=0 then t:=n-i+1;
p:=0;
for j:=1 to n do
begin
if not re[j] then inc(p);
if p=t then break;
end;c[i]:=j;
re[j]:=true;
end;
for i:= 1 to n do write(c[i],' ');
end.
迷迷糊糊得用所谓构造法过了。。。但是,希望有大大能发下完整的推导过程,谢谢 -
02008-09-10 19:50:16@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
过了,哈哈 -
02008-09-09 19:46:49@
var
i,j,k,s:longint;
a,b:array[1..20]of longint;
x:array[1..20]of boolean;
n,e,m:qword;function jie(q:qword):qword;
var
i,k:longint;
begin
jie:=1;
for i:=1 to q do
jie:=jie*i;
end;begin
fillchar(a,sizeof(a),0);
fillchar(x,sizeof(x),true);
readln(n,m);
i:=1;
e:=jie(n-i);
repeat
for k:=1 to n do
if x[k]
then if e -
02008-09-06 14:25:38@
算法思想:先找n个数的第k种全排列的第一个数,再找剩下n-1个数第k种全排列的第一个数......依此类推。
核心代码:
if k mod sum=0 then
i:=k div sum
else i:=k div sum+1;
l:=1;
p:=0;
i:=i mod (n-j+1);
if i=0 then i:=n-j+1;
repeat
if a[l] then inc(p);
inc(l);
until p>=i;
write(l-1,' ');
a[l-1]:=false;
0msAC. -
02008-09-05 22:23:31@
var
n,t:longint;
m:int64;
a:array[1..20] of integer;
flag:array[1..20] of boolean;procedure search(depth:integer);
var
i:integer;
begin
if(depth>n) then
begin
inc(t);
if t=m then
begin
write(a[1]);
for i:=2 to n do write(a[i]:2);end;
exit;
end;
for i:=1 to n do
if flag[i]=false then
begin
a[depth]:=i;
flag[i]:=true;
search(depth+1);
flag[i]:=false;
end;
end;begin
readln(n,m);
t:=0;
fillchar(flag,sizeof(flag),false);
search(1);
end. -
02008-08-28 19:36:10@
cantor展开 倒着来??
f 处理的这段的第一位数是从未用的数中第1到i大的数 后面接着j个数 是可以排多少种
若 f>=m 则 可以放第i大的数到该位 同时 在第i+1到n位 排出第 m-f大的数即可 -
02008-08-28 09:09:31@
我也用置换做的为什么也62?它超时。。。。。。。哪位大牛可以教一下
-
02009-02-12 07:51:31@
请看3的全排列:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
再看4的全排列 尤其是括号部分:
1 (2 3 4)
1 (2 4 3)
1 (3 2 4)
1 (3 4 2)
1 (4 2 3)
1 (4 3 2)
2 ……
3 ……
可见n+1的全排列 2--n+1 部分 与 n的全排列的顺序(不是数)一致通过这个规律也可AC 0ms
-
02008-08-25 17:01:28@
数据弱了....我4 6 都没出来就AC了
-
02008-08-22 16:38:28@
突然发现一个一直存在的问题,C的数组20,其实是0..19,习惯了Pascal,所以每次一到最大数据的时候总少一,啊,郁闷到了。难怪前几天的题要把范围改大点才能过。
-
02008-08-20 09:12:41@
解释一下楼下的代码
see[i]表示i是否可用,初始为true
s[i]=i! -
02008-08-19 16:54:54@
看了大牛的结题报告后一次AC
-
02008-08-10 16:24:31@
为什么用生成法
也会超时 -
02008-01-09 14:09:11@
本题采用递归回溯(以4为例)
先入栈
a[0]=1,a[1]=1+1,a[2]=1+1+1,a[3]=1+1+1+1,top=3;
回溯
top=2,a[2]=3+1=4,top=3,a[3]=1
回溯
a[3]=3,top=3
......
——方田 -
02008-01-02 21:44:57@
看了最下一位大牛的题解~~~恍然大悟
-
02007-12-28 17:14:58@
深搜怎么超时呢??