xdoj 1130 A Simple Math Problem 3 组合公式
来源:互联网 发布:美国反倾销数据库 编辑:程序博客网 时间:2024/06/05 08:06
题意:a(n)=sum((p+i*d)*C(n,i)) % 542,求第n项a[n]的值。
题目链接:http://acm.xidian.edu.cn/problem.php?cid=1018&pid=1
思路:sum((p+i*d)*C(n,i) =sum(p*C(n,i)+d*i*C(n,i)) ; 又因为 i*C(n,i) = n*C(n-1,i-1) ,所以sum((p+i*d)*C(n,i)) = sum(p*C(n,i)+d*n*(n-1,i-1)),然后i又是从0到n,C(n,0)+C(n,1)+......+C(n,n) =2^n(2的n次)。sum((p+i*d)*C(n,i) = p*2^n+d*n*2^(n-1)。还有就是需要用快速幂求2的n次。
输入一开始拿int一直WA,改成long long 就过了,好神奇。。。。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef long long LL;const int maxn = 1e5+100;#define INF 0x3f3f3f3fconst int MOD=542;LL Pow(LL a,int b){ LL ans=1; while(b) { if(b&1) ans=ans*a%MOD; a=a*a%MOD; b/=2; } return ans;}int main(){ int t; scanf("%d",&t); while(t--) { LL p,d; int n; scanf("%lld%lld%d",&p,&d,&n); LL ans=0; ans=Pow(2,n); ans=ans*p%MOD; ans=(ans+d*n%MOD*Pow(2,n-1)%MOD)%MOD; ans=(ans+MOD)%MOD; printf("%lld\n",ans); } return 0;}/************************************************************** Problem: 1130<span id="transmark"></span> Language: C++ Result: 正确 Time:1023 ms Memory:1688 kb****************************************************************/
0 0
- xdoj 1130 A Simple Math Problem 3 组合公式
- XDOJ-1022-A simple math problem 2(递推)
- A Simple Math Problem
- A Simple Math Problem
- A Simple Math Problem
- A Simple Math Problem
- A Simple Math Problem
- A simple math problem
- A Simple Math Problem
- A Simple Math Problem hdu1757
- hdu A Simple Math Problem
- hdu1757 A Simple Math Problem
- HDU1757 A Simple Math Problem
- hdu4979 A simple math problem.
- HDU4979 A simple math problem.
- HDU1757 A Simple Math Problem
- hdu1757 - A Simple Math Problem
- A Simple Math Problem HDU1757
- hdoj 1896 Stones 【优先队列】
- (十三)利用processing模拟粒子系统
- Java笔记基础
- 第39级台阶
- 第三周上机实践项目——项目2-本月有几天?
- xdoj 1130 A Simple Math Problem 3 组合公式
- 有理数类
- 文章标题
- Codeforces 629E:Famil Door and Roads
- Codeforces 618A Slime Combining 【模拟】
- ubuntu14.04 无线上网问题
- 第2周项目4 用循环求圆周率
- C语言复习
- 记录一下今天碰到的一个问题