zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 163(D)

    D - Sum of Large Numbers

    题意:题目的大概意思就是存在N+1个数,分别为10100,10100+1,10100+2,10100+3.........10100+N。从中至少选出K个数,求选出的K个数的和总共有多少种。

    题解:这一题是一个很好的思维题,你看,选择K数,和选择K+1个数相加的和是绝对不可能相等的。这样,我们就只需要遍历一遍去多少个数就可以了,然后算出当取K个数时,算出和的最小值与最大值,中间的值我们都可以取到。

    代码:

    #include<iostream>
    #define ll long long
    using namespace std;
    const ll mod=1e9+7;
    int main(){
        ll N,K;
        ll ans=0;
        cin>>N>>K;//从[ 0  ~  N] 中选
        ll sum=(1+N)*N/2;//总和 
        for(int i=K;i<=N;i++){//表示取  K  个数 
            //分别求出取 k 个数的最大值、与最小值
            ll t1=(0+i-1)*i/2;//和最小
            ll t2=(N+(N-i+1))*i/2;
            ll max_n=sum-t1;
            ll min_n=sum-t2;
            ans=ans+(max_n-min_n+1)%mod;
        }
        cout<<(ans+1)%mod<<endl;
        return 0;
    } 
  • 相关阅读:
    luogu_1414 又是毕业季II
    luogu_1372 又是毕业季I
    luogu_1313 计算系数
    luogu_1134 阶乘问题
    luogu_1514 引水入城
    luogu_1120 小木棍
    文件操作
    快速排序
    c oth
    ANSI C与C89、C99、C11区别差异
  • 原文地址:https://www.cnblogs.com/blogxsc/p/12741218.html
Copyright © 2011-2022 走看看