/ Vijos / 题库 / 选数 /

题解

184 条题解

  • 0
    @ 2008-11-03 22:36:46

    学会了用2的快速幂来判断素数。。。

  • 0
    @ 2008-10-31 21:52:20

    dfs伪素数判断(费马小定理)

    注意特判2!!!

    var

    a:array[1..20] of longint;

    p,n,k,ans,i:longint;

    function bin(x:longint):longint;

    var t:longint;

    begin

    if x=1 then exit(2);

    t:=bin(x div 2) mod p;

    if x and 1 = 1 then

    t:=t*t*2 mod p else t:=t*t mod p;

    exit(t);

    end;

    procedure dfs(x:longint);

    begin

    if n-x+1n then begin if (k=0)and((bin(p-1)=1)or(p=2)) then inc(ans); exit; end;

    p:=p+a[x];

    dec(k);

    if k>=0 then

    dfs(x+1);

    inc(k);

    p:=p-a[x];

    dfs(x+1);

    end;

    begin

    readln(n,k);

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

    dfs(1);

    writeln(ans);

    end.

  • 0
    @ 2008-10-30 20:54:13

    MAB 没说清楚可以重复害我多交一次

  • 0
    @ 2008-10-30 19:28:58

    Accepted without 剪枝……

  • 0
    @ 2008-10-29 21:30:04

    DFS+费马小定理。。。好象数据很弱,写麻烦了

  • 0
    @ 2008-10-28 12:27:04

    心情好~

    如果大家愿意就看看我的吧

    有点像背包问题

    procedure choose(b,j,i:longint);

    begin

    if j=k then choose(b,j,i+1);

    end;

    if j=k then

    if sushu(b) then inc(c);

    end;

    还有一个判断素数 就ok了

  • 0
    @ 2008-10-27 18:32:59

    haha

    2^20搜索

    顶歇!

  • 0
    @ 2008-10-27 12:06:52

    强的验证码,你猜是什么?

    我的是:oilj(OI垃圾)

    正好1128又是我的生日

    巧了!!

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

    编译通过...

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

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

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

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

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

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

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

    忘记了可能由两个数生成另一个数了。。。。。。

  • 0
    @ 2008-10-23 00:13:25

    编译通过...

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

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

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

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

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

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

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

    Oh Yeah

    朴素的素数判断也0ms,没有技术含量啊

  • 0
    @ 2008-10-22 12:11:44

    睡前水题一道,练练手也不错……

  • 0
    @ 2008-10-20 15:49:16

    编译通过...

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

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

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

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

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

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

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

    裸搜水题!!!

    #include

    #include

    using namespace std;

    int n,k,ans=0;

    int s[21];

    int ps(int num){

    if(numn>>k;

    for(int i=1;i>s[i];

    dfs(0,1,0);

    cout

  • 0
    @ 2008-10-19 21:28:33

    编译通过...

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

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

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

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

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

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

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

    注意形参和值参

  • 0
    @ 2008-10-16 12:40:54

    编译通过...

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

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

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

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

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

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

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

  • 0
    @ 2008-10-10 13:23:13

    编译通过...

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

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

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

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

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

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

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

    AC 50 题!纪念!

    很适合新手练习的DFS~很好的基础题。

    附上DFS代码:

    void search(int left,int now){

    if (left>n-now+1) return;

    else {

    if (left==0&&now==n+1){

    time+=check(sum);

    return;

    }

    else {

    search(left,now+1);

    if (left>0){

    sum+=x[now];

    search(left-1,now+1);

    sum-=x[now];

    }

    }

    }

    }

    search(k,1)即可。

    check()为朴素的枚举判断素数法。

  • 0
    @ 2008-10-07 23:25:27

    dfs+素数预处理

  • 0
    @ 2008-10-06 09:30:02

    编译通过...├ 测试数据 01:答案正确... 0ms├ 测试数据 02:答案正确... 0ms├ 测试数据 03:答案正确... 0ms├ 测试数据 04:答案正确... 0ms├ 测试数据 05:答案正确... 0ms-------------------------Accepted 有效得分:100 有效耗时:0ms

    搜索+打素数表=AC

  • 0
    @ 2008-09-29 23:35:54

    编译通过...

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

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

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

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

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

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

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

    一星半,记录一下

  • 0
    @ 2008-10-17 20:40:07

    var a,b,c:array[1..20] of integer;

    n,k:integer;sum,total:longint;

    procedure init;

    var i:integer;

    begin

    assign(input,'e:/lo.in');

    reset(input);

    readln(n,k);

    for i:=1 to n do

    read(a[i]);

    for i:=1 to k do

    begin

    b[i]:=i;

    c[i]:=n-k+i;

    end;

    close(input);

    end;

    procedure cal;

    var i:integer;

    begin

    sum:=0;

    for i:=1 to k do

    sum:=sum+a[b[i]];

    end;

    procedure judge;

    var i:longint;tru:boolean;

    begin

    tru:=false;

    for i:=2 to trunc(sqrt(sum))+1 do

    if sum mod i =0 then begin

    tru:=true;

    exit;

    end;

    if tru=false then total:=total+1;

    end;

    procedure combo(bb:integer);

    begin

    if bb>k then exit;

    while b[bb]

  • 0
    @ 2008-09-20 21:26:06

    编译通过...

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

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

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

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

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

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

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

    秒杀!

    思想:组合的生成+基础素数判断

    Water Problem

信息

ID
1128
难度
4
分类
搜索 | 搜索与剪枝 点击显示
标签
递交数
5808
已通过
2641
通过率
45%
被复制
27
上传者