题解

96 条题解

  • 0
    @ 2009-10-20 21:49:15

    无聊的编了个递归AC了。

    [url=http://blog.163.com/yy\_0227\_2009/]

  • 0
    @ 2009-09-23 20:36:28

    我太扯淡了

    program p1359;

    const sm:array[1..6] of integer=(1,2,3,5,7,9);

    var i,j,k,l,m,n:longint;

    function sushu(x:longint):boolean;

    var g,t:longint;

    begin if x=1 then exit(false);

    if (x=2)or(x=3)then exit(true);

    for g:=2 to round(sqrt(x)) do

    if x mod g=0 then exit(false);

    exit(true);

    end;

    procedure dfs(x:longint);

    var g,t,s:longint;

    begin

    if x div k>0 then begin writeln(x);exit;end;

    x:=x*10;

    for g:=1 to 6 do

    if sushu(x+sm[g]) then dfs(x+sm[g]);

    end;

    begin

    readln(n); k:=1;

    for i:=1 to n-1 do k:=k*10;

    dfs(0);

    end.

    交了两遍。。一开始把5丢了

  • 0
    @ 2009-09-13 20:07:16

    每次确定一位,若为质数,则往后加...一直加到K位.

    Const

    zs:array[1..6]of char=('1','2','3','5','7','9');

    Var

    i,j,k,p:longint;

    st:string;

    Function Tox(s:string):boolean;

    var

    i,z:longint;

    begin

    val(s,z);

    if z=1

    then exit(false);

    for i:=2 to trunc(sqrt(z)) do

    if z mod i=0

    then exit(false);

    exit(true);

    end;

    Procedure Fox(x:longint);

    var

    t:longint;

    begin

    for t:=1 to 6 do

    begin

    st[x]:=zs[t];

    if Tox(copy(st,1,x))and(x=k) 为什么?

    then writeln(st);

    if Tox(copy(st,1,x))and(x

  • 0
    @ 2009-09-12 17:49:40

    这题连十组数据都凑不齐

    还真可悲

    不过也很好了

  • 0
    @ 2009-08-21 12:15:30

    var n:longint;

    s:string;

    function zs(k:longint):boolean;

    var j:longint;

    begin

    zs:=true;

    if k=1 then begin zs:=false; exit; end;

    for j:=2 to round(sqrt(k)) do

    if k mod j =0 then

    begin

    zs:=false;

    exit;

    end;

    end;

    procedure find(m:integer);

    var i,x,t,p:longint;

    begin

    if m>n then begin writeln(s); exit; end;

    for i:=1 to 9 do

    begin

    t:=0;

    p:=1;

    for x:=m-1 downto 1 do

    begin

    p:=p*10;

    t:=(ord(s[x])-48)*p+t;

    end;

    t:=t+i;

    if zs(t) then

    begin

    insert(chr(i+48),s,m);

    find(m+1);

    delete(s,m,1);

    end;

    end;

    end;

    begin

    readln(n);

    find(1);

    end.

  • 0
    @ 2009-08-18 18:06:10

    USACO .. DFS ..

    Program ex;

    const

    a:array[1..4] of integer = (1,3,7,9) ;

    var

    r:integer;

    Function prime(x:longint):boolean;

    var

    i:longint;

    begin

    for i := 2 to trunc(sqrt(x)) do

    if x mod i = 0 then exit(false) ;

    exit(true) ;

    end;

    Procedure DFS(x,d:longint);

    var

    i:integer;

    o:longint;

    begin

    if d = r then

    begin

    writeln(x) ;

    exit;

    end;

    for i := 1 to 4 do

    begin

    o := x * 10 + a[i] ;

    if prime(o) then DFS(o,d+1) ;

    end;

    end;

    BEGIN

    read(r) ;

    DFS(2,1) ;

    DFS(3,1) ;

    DFS(5,1) ;

    DFS(7,1) ;

    END.

  • 0
    @ 2009-08-11 20:57:55

    数据咋这么小……直接枚举了,啥剪枝都懒得想,AC了……枚举第一个AC的……

  • 0
    @ 2009-08-07 21:04:52

    1100次提交,裸搜也瞬秒.

    我是沙茶!!!

  • 0
    @ 2009-08-07 16:37:43

    水题......

    以2,3,5,7为第一位

    如果当前这一个数为素数就再在后面添加1,3,7,9

    直接秒杀...

  • 0
    @ 2009-08-05 13:37:17

    编译通过...

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

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

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

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

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

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

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

    向大牛看齐 努力不打表..

    秒杀了这道题目以后

    才发现我写麻烦了

    思想:首先生成符合这种类型的数

    比如

    n=1

    2 3 5 7

    n=2的时候

    那么 我们就根据规律补上一根肋骨(即在后面添上一个数)

    21 23 25 27 29 判断素数(删去21 25 27) 23 29

    31 33 35 37 39 判断素数(删去33 35 39) 31 37

    .............

    就这样不断补到n位

    至于为什么我写繁了....(我太笨了 或者因为是这道题目太水了)

    判断素数 此题太水了 所以可以直接穷举 1-sqrt(n) 来判断

    而我用了miller rabin算法来判断....(真是没事找事!!)

  • 0
    @ 2009-08-04 21:27:30

    简单。。

    刚学信息学的时候就发明了一种枚举秒杀的超具体方法。。。

    //HINT 我那时全部人只有我一个秒杀。。。

    每次冲第一位找到一个非素数的,然后增加这一位。。

    这样能够去掉很多不必要的计算,尤其是位数比较多的时候。。。。

    (我想数据有QWORD那么大也可以过了吧。。)

    虽然还可以优化,但是已经足够秒杀了。。

    很纳闷为什么这题这么少人过,我想我是不是天才啦~~~(天生蠢材^_^)

    虽然程序有点丑,还是晒一下吧。。。

    ======================晒程序======================

    var

    n,i,n1,j,m:longint;

    function check(i:longint):boolean;

    var

    j:longint;

    begin

    if i=1 then exit(false);

    for j:=2 to trunc(sqrt(i)) do

    if i mod j=0 then exit(false);

    exit(true);

    end;

    begin

    readln(n);

    i:=1;

    for j:=1 to n-1 do i:=i*10;

    n1:=i*10;

    while i

  • 0
    @ 2009-08-02 21:54:56

    var

    n,i2:longint;

    st:string;

    function pd(x:longint):boolean;

    var

    k:longint;

    begin

    pd:=true;

    for k:=2 to trunc(sqrt(x)) do

    if x mod k=0 then begin pd:=false;exit;end;

    end;

    procedure dfs(s:string;l:longint);

    var

    i,j,x,shu:longint;

    s2:string;

    begin

    val(s,x);

    if l=n then

    begin if pd(x) then

    begin writeln(s);exit;end

    else exit;end;

    inc(l);

    for i:=1 to 9 do

    if (i=1)or(i=3)or(i=7)or(i=9)then

    begin

    s2:=s+chr(i+48);

    val(s2,shu);

    if pd(shu) then

    dfs(s2,l);

    end;

    end;

    begin

    readln(n);

    for i2:=1 to 9 do

    if (i2=2)or(i2=3)or(i2=5)or(i2=7)then

    begin

    str(i2,st);

    dfs(st,1);

    end;

    end.

    (剪枝:由条件可推:数的最高位只能取:2,3,5,7;其余各位只能取:1,3,7,9. 60%多的剪枝秒杀)

  • 0
    @ 2009-08-02 12:09:46

    usaco1.5的经典水题...

  • 0
    @ 2009-08-01 16:55:30

    编译通过...

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

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

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

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

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

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

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

    不打表照样秒杀……

  • 0
    @ 2009-07-31 21:27:13

    打表才是真英雄~~

  • 0
    @ 2009-07-28 17:49:36

    思路很简单~

    Program P1359;

    var i,n:longint;

    function check(t:longint):boolean;

    var i:longint;

    begin

    check:=true;

    if t=1 then exit(false);

    if t=2 then exit(true);

    for i:=2 to trunc(sqrt(t)) do

    if t mod i=0 then exit(false);

    end;

    procedure search(t,l:longint);

    var i,j:longint;

    begin

    if l=n then begin writeln(t); exit; end;

    if l=0 then search(2,1);

    for i:=0 to 4 do

    if check(t*10+i*2+1) then search(t*10+i*2+1,l+1);

    end;

    Begin

    readln(n);

    search(0,0);

    readln;

    end.

  • 0
    @ 2009-07-26 17:33:07

    dfs直接秒杀,想他那么复杂……

  • 0
    @ 2009-07-25 19:26:47

    差点淹死……(这也要打表……)

  • 0
    @ 2009-07-22 20:18:51

    典型的打表题,n最大才8.

  • 0
    @ 2009-06-28 22:00:51

    编译通过...

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

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

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

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

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

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

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

    不用交表,一次AC

信息

ID
1359
难度
3
分类
搜索 | 枚举数论 点击显示
标签
(无)
递交数
2004
已通过
953
通过率
48%
被复制
7
上传者