本文共 1204 字,大约阅读时间需要 4 分钟。
突破口:F(n)=∑i=1n(i×∑j=inCij) = 2n×(n-1)+1
怎么推的?找规律的。此外,还有公式C0n+…+Cnn=2n,或许可以帮助推出上式。 输入数据很大,需要用快速幂。代码如下:
#include#include #define mod 1000000007using namespace std;long long quick_pow(long long a,long long b) //快速幂(自个写的,可能会与网上的不太一样){ long long ans=1; while(b!=0) { if(b%2==0) { a=(a*a)%mod; b/=2; } else { ans=(ans*a)%mod; b--; } } return ans;}int main(){ long long n; int i; long long ans; while(~scanf("%lld",&n)) { ans=quick_pow(2,n); n=(n-1)%mod; //取模运算要仔细,否则容易出错,而且一出错还很难找到哪里错。 ans=(ans*n+1)%mod; printf("%lld\n",ans); } return 0;}
下面是另外一个代码:
#include#include #define mod 1000000007using namespace std;long long quick_pow(long long a,long long b){ long long ans=1; while(b!=0) { if(b%2==0) { a=(a*a)%mod; b/=2; } else { ans=(ans*a)%mod; b--; } } return ans;}int main(){ long long n; int i; long long ans; while(~scanf("%lld",&n)) { ans=(quick_pow(2,n)*(n-1)%mod+1)%mod; printf("%lld\n",ans); } return 0;}
下面这个代码WA,仅仅就是因为取模的过程不一样。因此,当需要多次取模的时候,一定要小心。
转载地址:http://fbdci.baihongyu.com/