NOIP2011计算系数详解

原题见洛谷(https://www.luogu.org/problem/show?pid=1313
想看稍微简单点的就是NOIP2016的组合数问题,小飞机~(http://blog.csdn.net/a1351937368/article/details/76907902
先说一下这道题需要用到:组合数(杨辉三角),乘方
做这道题的感受:题目中说(by+ax)^k,而输入顺序是先a后b搞得我60分emmmm,膜10007记得要开long long有可能会爆int
根据二项式定理,(x+y)^k中x^m*y^(k-m)的系数为C(k,m)
让我们改装一下:(ax+by)^k中x^m*y^(k-m)的系数为C(k,m)*a^m*b^(k-m)
然后这道题就可以乖乖的AC啦~再加点玄学卡常数和优化这道题总时间0ms(其实没必要)
代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>

const int maxn=1500;
int c[maxn][maxn];

inline int read(){
    int num;
    char ch;
    while((ch=getchar())<'0' || ch>'9');
    num=ch-'0';
    while((ch=getchar())>='0' && ch<='9'){
        num=num*10+ch-'0';
    }
    return num;
}
inline void out(int x){
    if(x>=10){
        out(x/10);
    }
    putchar(x%10+'0');
}
inline int time(int p,int q){
    if(q==0){
        return 1;
    }
    long long ans=1;
    for(register int i=1;i<=q;++i){
        ans*=p,ans%=10007;
    }
    return ans;
}

int main(){
    int b=read(),a=read(),k=read(),n=read(),m=read();
    long long ans;
    c[0][0]=1;
    for(register int i=1;i<=k;++i){
        c[i][0]=c[i][i]=1;
    }
    for(register int i=1;i<=k;++i){
        for(register int j=1;j<i;++j){
            c[i][j]=(c[i-1][j]+c[i-1][j-1])%10007;
        }
    }
    ans=c[k][m]*(time(a,m)*time(b,n)%10007)%10007;
    out(ans);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2020年NOIP初赛试题答案详解如下: 1. 小明有6只不同颜色的小球,分别放在6个盒子里。首先,他从第1个盒子取出一个球,放在第2个盒子里;然后,把第2个盒子里的球放在第3个盒子里;接着,将第3个盒子里的球放在第4个盒子里;以此类推,最后将第6个盒子里的球放在第1个盒子里。经过这样的操作后,小明发现每个盒子里的球的颜色都发生了变化,问小明一共进行了多少次操作? 解析:考察循环移位。根据题意可得,第i个盒子的球颜色经过了i次移动。最后小球不变颜色的唯一情况是做了6次循环移位,即每个盒子自己取出了一次球并放回原来的盒子,即可得答案为6。 2. 给定一个长度为n的正整数序列,将序列中的数字分为两个集合A和B,要求集合A的和与集合B的和差的绝对值最小。请问此时集合A中的数字个数最多可能有多少个? 解析:考察动态规划。定义一个二维数组dp,dp[i][j]表示前i个数字构成的集合A的和是否等于j。初始dp[0][0]=true,然后遍历数组,对于第i个数字nums[i],更新dp[i][j]:若dp[i-1][j-nums[i]]为true,则dp[i][j]也为true。最后从sum/2开始,倒序遍历,找到第一个dp[n][j]=true的j值,即为集合A中的数字个数最多的情况。 3. 给定一个字符串,统计其中出现次数最多的字符的个数,并求出这些字符的ASCII码的平均值。 解析:利用哈希表统计字符出现的次数。遍历字符串,对于每个字符,将其在哈希表中对应的计数加1。然后遍历哈希表,找出计数最大的次数,即为出现次数最多的字符的个数。接着遍历哈希表,计算总和及个数,最后除以个数求平均值,即为字符的ASCII码的平均值。 以上是2020年NOIP初赛试题答案的详细解析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值