题解

38 条题解

  • 0
    @ 2008-10-27 18:45:19

    写了100+行- -

    不过大多都是复制粘贴改几个字

  • 0
    @ 2008-10-22 23:22:12

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

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

    谢谢下面大牛提供思想,只要3次旋转即可,分别为:

    顺时针旋转 90° (x,y)-->(y,n-x+1)

    180° (x,y)-->(n-x+1,n-y+1)

    270° (x,y)-->(n-y+1,x)

    这样可以简写,不用写那么冗长(50 行左右代码)

  • 0
    @ 2008-10-20 08:11:54

    事实上是有n^2的算法的..

    有8种三角形的形状.统计以每一格为左上右上左下右下和上下左右直角顶点的所有情况

    最后扫描累加一遍..

  • 0
    @ 2008-10-11 15:25:00

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    郁闷

    数组定到100竟然要错两个点!!!开到101就AC,,,,

    我的正确率啊~~~~~~~~~~~~~~~~555

  • 0
    @ 2008-10-11 11:17:42

    [red]

    编译通过...

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

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

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

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

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

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

    ├ 测试数据 07:答案错误... ├ 标准行输出 1861

      ├ 错误行输出 B 1

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

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

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

    无语……为什么会错,而且错得相当离谱??

  • 0
    @ 2008-10-06 21:52:30

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    没有看到有人发算法,那我就写一下吧。

    算法三个模块

    主算法

    --case1

    --case2

    case1是图中第一种情况的三角形计数

    形状

    ++++

    +++

    ++

    +

    (这里先只考虑左上角是直角的情况)

    f(a,b,c)表示直角边长a,左上角第b行第c列是否可能有如图三角形

    初始化为f(i,j,k)=false

    f(1,1..n,1..n)=true

    显然的转移方程f(a,b,c)=f(a-1,b,c+1) and f(a-1,b+1,c) and (pic(b,c)=pic(b,c+1)=pic(b+1,c))

    pic代表图中的字母

    转移后计数 case1的时间花销为O(n^3)

    case2就是下面的图

    +

    +++

    +++++

    这里状态同上(同样只考虑这一种形状),转移方程

    f(a,b,c)=f(a-1,b+1,c-1) and f(a-1,b+1,c) and f(a-1,b+1,c+1) and (pic(b,c)=pic(b+1,c-1)=pic(b+1,c)=pic(b+1,c+1))

    同样计算状态后计数

    同样时间花销为O(n^3)

    最后的主算法是枚举四种旋转后调用case1,case2

    坐标旋转公式为(x,y)---|>(y,n-x+1),四次调用case1,case2即可

    最后注意要统计各种字母是否出现,防止陷阱。

    总复杂度O(n^3),不是很理想但是足够了。

  • 0
    @ 2008-09-26 17:26:32

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

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

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

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

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

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

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

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

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

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

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

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

    4向搜索,大量复制粘贴

  • 0
    @ 2008-09-25 18:52:22

    太简单拉!!!这年头MS枚举很吃香啊!!!不愧是最稳定的算法!!!

  • 0
    @ 2008-09-13 12:37:09

    第100题,庆祝提下!

  • 0
    @ 2008-10-30 20:36:35

    数组开100的时候:

    编译通过...

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

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

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

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

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

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

    ├ 测试数据 07:答案错误... ├ 标准行输出 1861...

     ├ 错误行输出 B 2...

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

    ├ 测试数据 09:答案错误... ├ 标准行输出 168

     ├ 错误行输出 U ...

    ├ 测试数据 10:答案错误...程序输出比正确答案长

    数组开110的时候:

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    天啊……这是为什么?

  • 0
    @ 2008-09-08 17:31:32

    动规轻松AC o!

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

  • 0
    @ 2008-09-07 11:29:25

    ......

  • 0
    @ 2008-09-03 19:21:42

    对每个字符进行8个方向的搜索,搜索到1个字符不等于原来的字符马上BREAK,这样所有数据都在0。1S内过(9个0S),注意计算总数的那个开大点,不燃会错(别忘记计算总三角行数,汗~我第一次竟忘记算……)

  • 0
    @ 2008-08-26 17:55:16

    一点思路也没有,

    那位大牛讲讲?

  • 0
    @ 2008-08-26 12:11:58

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    代码不长呀,40+行

    提醒:计算方向的时候用到MOD,最好把方向增量存下来

    否则会在常数上TLE

  • 0
    @ 2008-08-21 10:58:43

    囧!验证码 FFFF

  • 0
    @ 2008-08-20 12:24:31

    好长的代码

  • -1
    @ 2009-11-02 10:57:51

    一次A掉.

    上下左右每个方向依次搜

    O(8*n^2)

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

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    type arra=array[0..101,0..101]of longint;

    var

    n,all:longint;

    map:array[0..101,0..101]of char;

    f1,f2,f3:arra;

    count:array['A'..'Z']of longint;

    app:array['A'..'Z']of boolean;

    procedure print(a:arra);

    var

    i,j:longint;

    begin

    for i:=1 to n do

    begin

    for j:=1 to n do write(a,' ');

    writeln;

    end;

    writeln;

    end;

    procedure init;

    var

    i,j:longint;

    begin

    readln(n);

    fillchar(app,sizeof(app),0);

    for i:=1 to n do

    begin

    for j:=1 to n do

    begin

    read(map);

    app[map]:=true;

    end;

    readln;

    end;

    end;

    function min(a,b:longint):longint;

    begin

    if a1 then

    count[map]:=count[map]+f1-1;

    f2:=min(f2*ord(map=map),f2*ord(map=map))+1;

    if f2>1 then

    count[map]:=count[map]+f2-1;

    f3:=min(f3*ord(map=map),f3*ord(map=map))+1;

    if f3>1 then

    count[map]:=count[map]+f3-1;

    end;

    fillchar(f1,sizeof(f1),0);

    for i:=n downto 1 do

    for j:=1 to n do

    begin

    f1:=min(f1*ord(map=map),f1*ord(map=map))+1;

    if f1>1 then

    count[map]:=count[map]+f1-1;

    end;

    fillchar(f1,sizeof(f1),0);

    for i:=1 to n do

    for j:=1 to n do

    begin

    f1:=min(min(f1*ord(map=map),f1*ord(map=map)),f1*ord(map=map))+1;

    if f1>1 then

    count[map]:=count[map]+f1-1;

    end;

    fillchar(f1,sizeof(f1),0);

    for i:=n downto 1 do

    for j:=1 to n do

    begin

    f1:=min(min(f1*ord(map=map),f1)*ord(map=map),f1*ord(map=map))+1;

    if f1>1 then

    count[map]:=count[map]+f1-1;

    end;

    fillchar(f1,sizeof(f1),0);

    for j:=1 to n do

    for i:=1 to n do

    begin

    f1:=min(min(f1*ord(map=map),f1*ord(map=map)),f1*ord(map=map))+1;

    if f1>1 then

    count[map]:=count[map]+f1-1;

    end;

    fillchar(f1,sizeof(f1),0);

    for j:=n downto 1 do

    for i:=1 to n do

    begin

    f1:=min(min(f1*ord(map=map),f1*ord(map=map)),f1*ord(map=map))+1;

    if f1>1 then

    count[map]:=count[map]+f1-1;

    end;

    all:=0;

    for ch:='A' to 'Z' do if app[ch] then all:=all+count[ch];

    writeln(all);

    for ch:='A' to 'Z' do if app[ch] then

    begin

    writeln(ch,' ',count[ch]);

    end;

    end;

    begin

    init;

    find;

    end.

信息

ID
1403
难度
5
分类
动态规划 点击显示
标签
(无)
递交数
255
已通过
98
通过率
38%
被复制
2
上传者