vijosP1289 老板娘的促销方案
2015-10-13 19:21
369 查看
vijosP1289 老板娘的促销方案
链接:https://vijos.org/p/1289
【思路】
组合公式+高精度。
如果n-m<2则无解。
否则对于第一个询问:ans=C(n-m,2)+C(n-m,3)=C(n-m+1,3)。对于第二个询问:
由此可见,对于递推式的化简也是很重要的,可以有效简化求解。
不管有没有陷阱,反正我用高精度=_=。高精度一定要写熟练,如臂指使。
【代码】
链接:https://vijos.org/p/1289
【思路】
组合公式+高精度。
如果n-m<2则无解。
否则对于第一个询问:ans=C(n-m,2)+C(n-m,3)=C(n-m+1,3)。对于第二个询问:
由此可见,对于递推式的化简也是很重要的,可以有效简化求解。
不管有没有陷阱,反正我用高精度=_=。高精度一定要写熟练,如臂指使。
【代码】
#include<iostream> using namespace std; struct Bign{ int len; long long N[101]; Bign() { for(int i=0;i<101;i++) N[i]=0; } }; int n,m; void multi(Bign& a,int x) { for(int j=0;j<a.len;j++) a.N[j] *= x; int i=0; while(i<a.len || a.N[i]>10) { a.N[i+1] += a.N[i]/10; a.N[i] %= 10; i++; //i++ } if(a.N[i]) a.len=i+1; else a.len=i; } void div(Bign& a,int x) { for(int i=a.len-1;i>0;i--) { a.N[i-1] += a.N[i]%x*10; a.N[i] /= x; } while(a.N[a.len-1]==0) a.len--; a.N[0]/=x; } int main() { Bign C; C.len=1; C.N[0]=1; cin>>n>>m; if(n-m<2) cout<<"NO!\n"; else { int k=n-m+1; for(int i=k-2;i<=k;i++) multi(C,i); div(C,6); for(int i=C.len-1;i>=0;i--) cout<<C.N[i]; cout<<"\n"; } Bign C2; C2.len=1; C2.N[0]=1; for(int i=n-2;i<=n+1;i++) multi(C2,i); div(C2,24); if(C2.N[0]==0) { C2.N[1]--; C2.N[0]+=10; } C2.N[0]-=1; for(int i=1;i<C2.len;i++) if(C2.N[i]<0) { C2.N[i]+=10; C2.N[i+1]--; } for(int i=C2.len-1;i>=0;i--) cout<<C2.N[i]; return 0; }
相关文章推荐
- 第四次作业--目标软件:必应词典
- Objective-c开发中混合使用ARC
- 第7周-反向显示一个数
- 解析Python中while true的使用
- poj Balanced Lineup (线段树区间最值+优化)
- web技术概论第一周作业
- 前端工程师必备的PS技能——切图篇(笔记)
- 杭电acm--1037
- 借贷宝“自我绑架”:传销式推广只能“烧钱”玩下去?
- ios短信和电话--参考
- Reachability网络判断
- 【停课集训10.13】【#3 training】
- js中的引用赋值
- BZOJ 1093: [ZJOI2007]最大半连通子图( tarjan + dp )
- 高效JQuery编码
- 条件变量的细节问题
- linux内核网络参数somaxconn
- 图形学理论知识 BRDF 双向反射分布函数
- 删除归档
- 技能条的制作