标签:AtCoder Beginner int ll 个数 long 算出 10100 163
题意:题目的大概意思就是存在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; }
标签:AtCoder,Beginner,int,ll,个数,long,算出,10100,163 来源: https://www.cnblogs.com/blogxsc/p/12741218.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。