/ Vijos / 题库 / 盒子 /

题解

80 条题解

  • 0
    @ 2009-08-18 16:40:08

    组合数学!

    我才初三,不会!

    看了大牛的题解才懂!

    大家别麻烦了,直接看“李冲欠我钱”的题解!

  • 0
    @ 2009-08-03 15:07:13

    C(n+a,a)*C(n+b,b)

    unsigned long long,边乘边除

  • 0
    @ 2009-06-19 22:36:35

    简单的排列组合。C(n+a,a)*C(n+b,b)

    先只考虑一种球:

    因为有n个盒子每个盒子可以放任意多球,还可以空出来任意多球。所以可以考虑为n+1个盒子,最后一个盒子里面是题中没放的球。

    由于盒子可以空出来,所以将隔板与球一起排列 即在隔板和球组成的n+a列中 选出任意a个位置放隔板的话,就可以实现题目要求的效果!(0个或任意多个)。

    两种球所以C(n+a,a)*C(n+b,b)。

    用extended可以去掉trunc来非处理保证数据得到正解!不过题目要求另外也可以证明((a1*i)/(i-n))是整数!所以用qword类型+trunc!

    begin

    readln(n,a,b);

    a1:=1;a2:=1;

    for i:=1+n to a+n do

    a1:=trunc((a1*i)/(i-n));

    for i:=1+n to b+n do

    a2:=trunc((a2*i)/(i-n));

    writeln(a1*a2);

    end.

  • 0
    @ 2009-05-15 05:40:13

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    program temp;

    var

    n,a,b,i:longint;

    ca,cb,ans:qword;

    begin

    readln(n,a,b);

    ca:=1;

    cb:=1;

    for i:=1 to a do begin

    ca:=ca*(n+i);

    ca:=ca div i;

    end;

    for i:=1 to b do begin

    cb:=cb*(n+i);

    cb:=cb div i;

    end;

    ans:=ca*cb;

    writeln(ans);

    readln;

    end.

  • 0
    @ 2009-05-14 16:15:44

    大家注意了,高精度就不必了。

    但是int64过不了,而qword可以擦着过去。

  • 0
    @ 2009-04-13 19:05:19

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    杨辉三角 BT啊!没想到!

    var aa:array[0..50,0..50] of qword;

    i,j,k,l:integer;

    n,a,b:integer;

    begin

    readln(n,a,b);

    if a

  • 0
    @ 2009-04-06 16:15:16

    突然发现真的很多Ural的题目。。。

    #include

    using namespace std;

    int a[100]={0},b[100]={0},c[100]={0},s[100]={0};

    int main(void)

    {

    int n,aa,bb,m;

    cin>>n>>aa>>bb;

    if (aa>bb) m=aa;else m=bb;

    int f[30][20][100]={0};

    for (int i=1;i

  • 0
    @ 2009-04-04 02:12:36

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    #include

    using namespace std;

    int main()

    {

    long a,b,n,i;

    unsigned long long k1,k2;

    cin>>n>>a>>b;

    k1=k2=1;

    for(i=1;i

  • 0
    @ 2009-02-22 19:46:24

    一次AC,有必要那么烦吗

    c(n,a)*c(n,b)=AC

  • 0
    @ 2009-01-24 19:54:19

    var i,j,n,a,b:longint;

    s,ss:array[0..20] of qword;

    s1,s2,s3,s4:qword;

    begin

    readln(n,a,b);

    s1:=1;

    s2:=1;

    s3:=1;

    s4:=1;

    for i:=1 to a do

    begin

    s1:=s1*(n-i+1) div i;

    s3:=s3+s1;

    end;

    for i:=1 to b do

    begin

    s2:=s2*(n-i+1) div i;

    s4:=s4+s2;

    end;

    writeln(s3*s4);

    end.

    谁能告诉我错在哪。。

  • 0
    @ 2008-12-28 17:34:41

    纯数学题!!!!!

  • 0
    @ 2008-11-08 13:18:47

    突然发现我和大家的做法。。不太一样也。。

    readln(n,a,b);

    k:=1;

    for i:=0 to a do

    for j:=0 to b do

    begin

    if i>0 then f[k,i,j]:=f[k,i-1,j]+j+1

    else f[k,i,j]:=f[k,i,j-1]+1;

    end;

    for k:=2 to n do

    begin

    for p:=0 to a do

    for q:=0 to b do

    for i:=0 to p do

    for j:=0 to q do

    f[k,p,q]:=f[k,p,q]+f[k-1,p-i,q-j];

    end ;

    writeln(f[n,a,b]);

    end.

    这样不错吧。。

    原来用了int64..改成qword 菜才 A掉。。

  • 0
    @ 2008-11-06 14:14:50

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

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

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

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

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

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

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

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

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

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

  • 0
    @ 2008-11-03 15:51:09

    编译通过...

    ├ 测试数据 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-11-03 13:27:54

    #include

    int main(void)

    {

    int N,A,B,i,k;

    while(scanf("%d %d %d",&N,&A,&B)==3)

    {k=1;

    if(N>=1&&N=0&&A=0&&B

  • 0
    @ 2008-11-02 13:50:05

    program P1060;

    var

    n,a,b,i:longint;

    k1,k2:qword;

    begin

    read(n,a,b);

    k1:=1;

    for i:=1 to a do

    k1:=k1*(n+i) div i; (连续i个数的乘积必然能被i整除,所以直接用div省得再用实数)

    k2:=1;

    for i:=1 to b do

    k2:=k2*(n+i) div i;

    writeln(k1*k2);

    end.

  • 0
    @ 2008-11-02 10:16:16

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

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

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

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

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

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

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

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

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

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

     ├ 错误行输出

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

    Unaccepted 有效得分:90 有效耗时:0ms

    傻了 (╰_╯)#

  • 0
    @ 2008-10-30 20:10:25

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    program c1060;

    var n,a,b,i,j,k,ii,jj:integer;

    ss:array[0..20,0..15,0..15]of qword;

    begin

    readln(n,a,b);

    for i:=0 to a do for j:=0 to b do ss[0,i,j]:=1;

    for k:=1 to n do

    for i:=0 to a do

    for j:=0 to b do

    for ii:=0 to i do

    for jj:=0 to j do

    ss[k,i,j]:=ss[k,i,j]+ss[k-1,i-ii,j-jj];

    writeln(ss[n,a,b]);

    end.

  • 0
    @ 2008-10-21 13:00:02

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

信息

ID
1060
难度
5
分类
组合数学 点击显示
标签
(无)
递交数
1931
已通过
716
通过率
37%
被复制
9
上传者