zoukankan      html  css  js  c++  java
  • UVA 10910 Marks Distribution

    UVA_10910

        首先,如果总的分数不够的话,肯定输出0。之后我们就可以把问题转化成这样了,假设多出来的分数为p,那么把p个相同的小球放到N个盒子里,每个盒子可以为空,一共有多少种方法?

        解决上面说的这种放小球的问题可以用“隔板法”,N-1隔板隔开的小球的情况就是相应每个盒子里小球的状况,由于盒子可以为空,就相当于p+N-1和空位选出N-1个位置放隔板的方法数,那么结果就是C(p+N-1,N-1),转换成原题的数据,就是C(T-P*N+N-1,N-1)。

    #include<stdio.h>
    #include<string.h>
    int N, T, P;
    void solve()
    {
    int i;
    long long int m, n, res;
    n = T - P * N;
    if(n < 0)
    printf("0\n");
    else
    {
    m = T - P * N + N - 1;
    if(m - n < n)
    n = m - n;
    res = 1;
    for(i = 1; i <= n; i ++)
    res = res * (m - i + 1) / i;
    printf("%lld\n", res);
    }
    }
    int main()
    {
    int t;
    scanf("%d", &t);
    while(t --)
    {
    scanf("%d%d%d", &N, &T, &P);
    solve();
    }
    return 0;
    }


  • 相关阅读:
    数组对象
    禁止鼠标右键保存图片、文字,禁止拖动图片等代码
    解决vscode 电脑卡顿
    vscode Html标签自动补全
    git提交报错
    作为一个程序员为什么要写博客?
    aaa
    JDBC
    去ioe
    去中心化
  • 原文地址:https://www.cnblogs.com/staginner/p/2290529.html
Copyright © 2011-2022 走看看