# 25 条题解

• @ 2023-08-18 10:16:32
``````const py=100000;
type dd=array[0..50] of longint;
var
f:array[0..51,0..600] of dd;
d:array[0..51,0..51] of longint;
n,l,i,j,k:longint;
ans,t:dd;
var i,len:longint;
begin
if a[0]>b[0] then len:=a[0] else len:=b[0];
for i:=1 to len do
begin
end;
end;
begin
for i:=0 to n do
for j:=0 to n do
d[i,j]:=maxlongint;

for i:=1 to n do
begin
d[i+1,i]:=d[i,i+1];
end;
d[n,1]:=d[n,n+1]; d[1,n]:=d[n,1];

for i:=1 to n do
begin
d[i,0]:=d[0,i];
end;
f[0,0][0]:=1; f[0,0][1]:=1;
for j:=1 to l do
for i:=0 to n do
begin
fillchar(t,sizeof(t),0);
for k:=0 to n do
if (d[i,k]<=j) and (d[i,k]<>maxlongint) then
f[i,j]:=t;
end;
ans:=f[0,l];
write(ans[ans[0]]);
for i:=ans[0]-1 downto 1 do
begin
if ans[i]<10 then write('0');
if ans[i]<100 then write('0');
if ans[i]<1000 then write('0');
if ans[i]<10000 then write('0');
write(ans[i]);
end;

end.
``````
• @ 2013-08-15 09:25:53

const py=100000;
type dd=array[0..50] of longint;
var
f:array[0..51,0..600] of dd;
d:array[0..51,0..51] of longint;
n,l,i,j,k:longint;
ans,t:dd;
var i,len:longint;
begin
if a[0]>b[0] then len:=a[0] else len:=b[0];
for i:=1 to len do
begin
end;
end;
begin
for i:=0 to n do
for j:=0 to n do
d[i,j]:=maxlongint;

for i:=1 to n do
begin
d[i+1,i]:=d[i,i+1];
end;
d[n,1]:=d[n,n+1]; d[1,n]:=d[n,1];

for i:=1 to n do
begin
d[i,0]:=d[0,i];
end;
f[0,0][0]:=1; f[0,0][1]:=1;
for j:=1 to l do
for i:=0 to n do
begin
fillchar(t,sizeof(t),0);
for k:=0 to n do
if (d[i,k]<=j) and (d[i,k]<>maxlongint) then
f[i,j]:=t;
end;
ans:=f[0,l];
write(ans[ans[0]]);
for i:=ans[0]-1 downto 1 do
begin
if ans[i]<10 then write('0');
if ans[i]<100 then write('0');
if ans[i]<1000 then write('0');
if ans[i]<10000 then write('0');
write(ans[i]);
end;

end.

• @ 2009-11-02 21:55:22

DP:=SIGMA(DP[k,j-('边长')])(k为i相邻的点);

谁详细解释一下

• @ 2009-10-26 12:24:37

编译通过...

├ 测试数据 01：答案正确... 0ms

├ 测试数据 02：答案正确... 0ms

├ 测试数据 03：答案正确... 72ms

├ 测试数据 04：答案正确... 0ms

├ 测试数据 05：答案正确... 306ms

├ 测试数据 06：答案正确... 244ms

├ 测试数据 07：答案正确... 119ms

├ 测试数据 08：答案正确... 525ms

├ 测试数据 09：答案正确... 556ms

├ 测试数据 10：答案正确... 509ms

---|---|---|---|---|---|---|---|-

Accepted 有效得分：100 有效耗时：2331ms

....Victoria Roo....

• @ 2009-10-25 14:51:14

编译通过...

├ 测试数据 01：答案正确... 0ms

├ 测试数据 02：答案正确... 0ms

├ 测试数据 03：答案正确... 0ms

├ 测试数据 04：答案正确... 0ms

├ 测试数据 05：答案正确... 9ms

├ 测试数据 06：答案正确... 25ms

├ 测试数据 07：答案正确... 0ms

├ 测试数据 08：答案正确... 72ms

├ 测试数据 09：答案正确... 72ms

├ 测试数据 10：答案正确... 72ms

---|---|---|---|---|---|---|---|-

Accepted 有效得分：100 有效耗时：250ms

。。。。哦~~~~~~原来如此

• @ 2009-10-22 19:56:27

Accepted 有效得分：100 有效耗时：282ms

Vijos Sunny

诧异了，看了大牛的解释之后终于明白这题意....

然后自己去写，按最白痴的方法+高精，居然过了.....

虽然时间不是很好看.....

• @ 2009-10-06 23:50:04

这个每个点是可以多次通过的……

准确的说，是多条可重复的 关于O点的哈密顿回路 组成的满足总长度为L的路径。

或者说，多次从O点出发回到O点，对于每一次之中不能有重复的点，但是不同的两次之间可以有重复的点。

• @ 2009-10-04 10:14:39

重要的是理解题意。我语文学的烂一开始根本没读懂想考什么。

理解后就是一个弱弱的高精+dp

190/600(32%)

• @ 2009-10-05 19:14:09

搜索居然全部超时！Orz...

动规第一次输出到fopen，0分（运行时）。

再交 Ac!

编译通过...

├ 测试数据 01：答案正确... 0ms

├ 测试数据 02：答案正确... 0ms

├ 测试数据 03：答案正确... 72ms

├ 测试数据 04：答案正确... 0ms

├ 测试数据 05：答案正确... 150ms

├ 测试数据 06：答案正确... 181ms

├ 测试数据 07：答案正确... 88ms

├ 测试数据 08：答案正确... 212ms

├ 测试数据 09：答案正确... 259ms

├ 测试数据 10：答案正确... 212ms

---|---|---|---|---|---|---|---|-

Accepted 有效得分：100 有效耗时：1174ms

• @ 2009-10-01 21:44:57

编译通过...

├ 测试数据 01：答案正确... 0ms

├ 测试数据 02：答案正确... 0ms

├ 测试数据 03：答案正确... 0ms

├ 测试数据 04：答案正确... 0ms

├ 测试数据 05：答案正确... 0ms

├ 测试数据 06：答案正确... 0ms

├ 测试数据 07：答案正确... 0ms

├ 测试数据 08：答案正确... 0ms

├ 测试数据 09：答案正确... 0ms

├ 测试数据 10：答案正确... 0ms

---|---|---|---|---|---|---|---|-

Accepted 有效得分：100 有效耗时：0ms

太激动了！太激动了！太激动了！太激动了！太激动了！太激动了！太激动了！太激动了！太激动了！太激动了！太激动了！太激动了！太激动了！太激动了！太激动了！

这么简单的题竟然交了9次………………郁闷…………郁闷………………

开始0分，因为题目数据有问题。

后来翻过来90分，最后一个超时。

我那时是string记录每次运算都要用int64转换，也许是慢了点…………

改成int64数组组成的高精度记录，40分…………不知缘故

改成longint数组表示8位，40分…………不知缘故

…………优化…………40分…………不知缘故

…………优化…………40分…………不知缘故

……………………………………………………………………………………

…………优化…………40分…………不知缘故

…………优化…………40分…………不知缘故

用了50 600极限数据，竟然出现了‘－’。

要知道 99999999*3＝299999997

longint的范围达到了2147483647

for i:=1 to l do begin

for j:=1 to n do begin

if i>=zhong[j] then for k:=1 to 30 do f:=f+f[i-zhong[j],0,k];

if i>=bian[j] then begin

if j=bian[j-1] then begin

if j>1 then for k:=1 to 30 do f:=f+f[i-bian[j-1],j-1,k]

else for k:=1 to 30 do f:=f+f[i-bian[j-1],n,k];

end;

for k:=1 to 29 do

if f>=max then begin

f:=f+f div max;

f:=f mod max;

end;

end;

for j:=1 to n do if i>=zhong[j] then for k:=1 to 30 do f:=f+f[i-zhong[j],j,k];

for k:=1 to 29 do

if f>=max then begin

inc(f,f div max);

f:=f mod max;

end;

end;

怎么会有‘－’呢？？？？？？？？？？？？？？

最后这一次把8位改成7位，AC了！！！！！！！！！！！

那就是说8位爆掉了。longint用8位做高精度加法竟然会爆掉！！！！

真是无语！！！！真是郁闷！！！！

可以登上世界未解之谜了吧！！！！！！！！！！！

……………………n min……………………

有个地方偷了点懒，为了节约时间而误了进位时机，所以爆掉了。

怎么会犯这样的错啊，RP啊！！！！

• @ 2009-10-01 15:59:54

编译通过...

├ 测试数据 01：答案正确... 0ms

├ 测试数据 02：答案正确... 0ms

├ 测试数据 03：答案正确... 0ms

├ 测试数据 04：答案正确... 0ms

├ 测试数据 05：答案正确... 119ms

├ 测试数据 06：答案正确... 119ms

├ 测试数据 07：答案正确... 56ms

├ 测试数据 08：答案正确... 228ms

├ 测试数据 09：答案正确... 244ms

├ 测试数据 10：答案正确... 212ms

---|---|---|---|---|---|---|---|-

Accepted 有效得分：100 有效耗时：978ms

考试时0分，唉

• @ 2009-10-01 14:13:03

看来我真的是沙茶了...

这种题都不会做了...

• @ 2009-10-01 13:32:32

晕啊

为什么考试0分 现在AC？？？ 完全一样啊

• @ 2009-10-01 12:21:23

问一下,什么是正多边形？

• @ 2009-10-01 12:02:56

数据已经更新，按照题目顺序读入吧

• @ 2009-10-01 12:13:27

。。。。。。Orz 全场爆零题

• @ 2009-10-01 11:27:43

方程用二维表示

DP表示终点在 I 经过长度为J 的路径种类数

状态转移

DP:=SIGMA(DP[k,j-('边长')])(k为i相邻的点);

用上高精度.

构造循环需要优化，可以用路径长度来循环，再枚举点，

另外 这题跟哈密顿回路根本没有关系

可以理解为从O 点出发最后再回到O点经过长度为L的种类数.

经过的路径没有任何限制.

最后输出要WRITELN 不然第6组会TLE

• @ 2009-10-01 10:54:20

rt

• @ 2009-10-01 10:49:09

果然是倒一下

呜呜呜！好不容易会一道题！

竟然...

• @ 2009-10-01 10:46:56

QJ

是不是圆心可以经过多次？？？

ID
1658

6

(无)

346

81

23%

2