题解

25 条题解

  • 0
    @ 2009-11-10 17:24:47

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    把一个排列看成一个矩阵,横坐标表示第i个数,纵坐标表示这个数在哪一个位置

    那么b[i]表示的就是以(i,i)点为右下角以(1,1)点为左上角的矩形中1的个数

    而b[i]-b表示的是一个'L'字形中1的个数,我们可以把矩阵拆成n个'L'字形

    对于第i层:

    若b[i]-b=0,ans=ans 此层不必考虑

    若b[i]-b=1,这层本来有2*i-1个位置可以放'1' ,由于内层已经放了b个互不冲突的'1',当前层必然减少了2*b个位置(之前的每个'1'在横行、纵行的方向使当前层的一个位置不可行),所以递推式:

    ans=ans*(2*i-1-2*b)

    若b[i]-b=2,则这两个必在'L'的两条臂上(大概没有人会不明白这点吧),同理,每条臂上剩余的位置个数都是i-1-b,i-1是臂长(不包括交点),之前的每个'1'使两条臂不可行的位置各增加1,所以递推式

    ans=ans*(i-1-b)^2

    小弟不才,写的比较多了...

    var n,i,j:longint;

    x,y:int64;

    b:array[0..2000] of integer;

    ans:array[0..1000] of int64;

    begin

    readln(n);

    for i:=1 to n do read(b[i]);

    ans[0]:=1; ans[1]:=1;

    for i:=1 to n do

    begin

    if b[i]-b=0 then continue;

    if b[i]-b=1 then

    begin

    x:=0; y:=2*i-1-2*b;

    for j:=1 to ans[0] do

    begin

    x:=x+ans[j]*y;

    ans[j]:=x mod 1000000;

    x:=x div 1000000;

    end;

    while x>0 do

    begin

    inc(ans[0]);

    ans[ans[0]]:=x mod 1000000;

    x:=x div 1000000;

    end;

    end;

    if b[i]-b=2 then

    begin

    x:=0; y:=sqr((i-1-b));

    for j:=1 to ans[0] do

    begin

    x:=x+ans[j]*y;

    ans[j]:=x mod 1000000;

    x:=x div 1000000;

    end;

    while x>0 do

    begin

    inc(ans[0]);

    ans[ans[0]]:=x mod 1000000;

    x:=x div 1000000;

    end;

    end;

    end;

    write(ans[ans[0]]);

    for i:=ans[0]-1 downto 1 do

    begin

    if ans[i]

  • 0
    @ 2009-10-06 13:18:38

    完美建模~~

    看了题解才知道...

  • 0
    @ 2009-10-05 16:17:15

    推递推式的那个矩阵用的很不错

    http://hi.baidu.com/qyjubriskxp/blog/item/ab51f40181cb927d3812bb71.html

    很不错!!

  • 0
    @ 2009-10-05 15:40:59

    编译通过...

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

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

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

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

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

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

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

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

    ├ 测试数据 09:答案正确... 212ms

    ├ 测试数据 10:答案正确... 197ms

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

    Accepted 有效得分:100 有效耗时:709ms

    我没压位 。。。

    但是 WA了 3次

  • 0
    @ 2009-10-05 13:55:47

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    矩形那个 很不错的转化!

  • 0
    @ 2009-10-05 13:09:07

    还是质因数分解好

  • 0
    @ 2009-10-05 12:21:18

    压万位就爆3点,压千位就全过,晕

    递推式在这

    http://user.qzone.qq.com/281130306/infocenter?ptlang=2052

  • 0
    @ 2009-10-04 15:57:26

    一开始做的时候想到变成矩阵了,但是怎么想都觉得应该是O(n)的算法……和2000的范围不相符……后来意识到还有高精度……

  • 0
    @ 2009-10-04 15:27:48

    呃...因为一段高精交了4遍10分....好伤心啊...TAT

  • 0
    @ 2009-10-04 15:02:04

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

    悲剧了,高精进位打错了T^T

    感谢题解,这思路真是神奇~

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

    晕、还以为是传说中的差分=.=、、占位先.

  • 0
    @ 2009-10-04 14:18:38

    感谢qyjubriskxp神牛的帮助

    不懂的都可以去看看他的题解http://hi.baidu.com/qyjubriskxp/blog/item/ab51f40181cb927d3812bb71.html

  • 0
    @ 2009-10-04 10:50:43

      这题还是不压位的好!压位,计算中有可能超过LONGINT。不压位也不会超时。

  • 0
    @ 2009-10-04 09:11:13

    你至少可以算出答案不会超过N!也就是5735位

  • 0
    @ 2009-10-04 03:12:15

    为了ac这题我付出了9次提交的代价,ac率下降1%,T-T(伤心ing....)

    总结一下

    想算法花去了n个小时,徘徊在正确算法的边缘,就是无法突破

    突然给我想到了,于是提交,30分,数据范围问题

    于是用double,输出指数,看看结果有多少位,结果double爆掉了(~汗)

    再看看int64能否蒙混过关,30分

    只好写高精,因为时间太晚,打错了一个地方,0分

    找到错误,再交70分,提示我的输出出现了负数

    以为是位数的问题,狠加位数n次,直至有一次不能分配足够的静态内存了,明白问题不在这里

    我没专门学过高精,这题挑战了我一贯的写法,我只好对一个long的数组由压万位变成压千位,终于ac了啊!!!

    实在被这题打败的牛们可以看看我的解题报告

    http://hi.baidu.com/qyjubriskxp/blog/item/ab51f40181cb927d3812bb71.html

  • 0
    @ 2009-10-03 15:30:38

    貌似LLH给我们讲过

  • 0
    @ 2009-10-03 10:59:10

    逐位递归?

  • 0
    @ 2009-10-03 09:40:49

    精妙^_^

  • 0
    @ 2009-10-03 09:39:35

    各位大牛是怎么AC的啊

  • 0
    @ 2009-10-03 09:07:48

    我也邪恶一下~~

    飘过…………

信息

ID
1660
难度
7
分类
组合数学 | 高精度 点击显示
标签
递交数
451
已通过
74
通过率
16%
被复制
2
上传者