彩票中奖几率
2016-07-14 14:17
211 查看
题目描述
BSNY发明了一种彩票机器,能产生彩票中奖数字,并且有多种模式可以选择。使用前,BSNY首先要输入4个参数:C, B , S, U,分别代表有多少个候选数字,产生多少个数字,符合从左到右不下降排序,符合数字不重复。其中,S, U的输入只能是“T”或“F”(“T”表示一定这样排序和不重复,“F”表示无所谓)。
例如C=20, B=4,表示有1到20个连续数字,从中取4个构造彩票中奖号码。那么,产生{3,7,12,14}的这样彩票,在任何情况下都是有效;
产生{13,4,1,9}这样的彩票,只有在S=“F”的情况下有效的;
产生{8,8,8,15}这样的彩票,只有在U=”F”的情况下有效的;
产生{11,6,2,6}这样的彩票,只有在S=“F”且U=”F”的情况下有效的;
这样的话,根据C, B, S, U的参数不同,产生不同彩票的数量就不同,中奖几率也不同(中奖几率=1 / 不同彩票的数量)。
现在BSNY有n种参数,希望你根据中奖几率从大到小给他们排序(如果几率一样,编号小的在前)。
输入
第一行输入n
接下来n行,每行输入4个参数
输出
输出排序,格式参照样例
样例输入
4
2 2 T T
2 2 F F
2 2 T F
2 2 F T
样例输出
1
4
3
2
提示
【样例说明】
C=2, B=2的情况下,可以构造{1, 1},{1, 2},{2, 1},{2,2},其中
2 2 T T只能构造{1, 2},中奖概率为100%
2 2 F T只能构造{1, 2}, {2, 1},中奖概率为50%
2 2 T F只能构造{1, 2}, {1, 1},{2, 2},中奖概率为33%
2 2 F F可以构造全部,中奖概率25%
【数据规模和约定】
1<=n=1000, 1<=C<=50, 1<=B<=10, B<=C
这题作为第三题,真是水得可以。。。
BSNY发明了一种彩票机器,能产生彩票中奖数字,并且有多种模式可以选择。使用前,BSNY首先要输入4个参数:C, B , S, U,分别代表有多少个候选数字,产生多少个数字,符合从左到右不下降排序,符合数字不重复。其中,S, U的输入只能是“T”或“F”(“T”表示一定这样排序和不重复,“F”表示无所谓)。
例如C=20, B=4,表示有1到20个连续数字,从中取4个构造彩票中奖号码。那么,产生{3,7,12,14}的这样彩票,在任何情况下都是有效;
产生{13,4,1,9}这样的彩票,只有在S=“F”的情况下有效的;
产生{8,8,8,15}这样的彩票,只有在U=”F”的情况下有效的;
产生{11,6,2,6}这样的彩票,只有在S=“F”且U=”F”的情况下有效的;
这样的话,根据C, B, S, U的参数不同,产生不同彩票的数量就不同,中奖几率也不同(中奖几率=1 / 不同彩票的数量)。
现在BSNY有n种参数,希望你根据中奖几率从大到小给他们排序(如果几率一样,编号小的在前)。
输入
第一行输入n
接下来n行,每行输入4个参数
输出
输出排序,格式参照样例
样例输入
4
2 2 T T
2 2 F F
2 2 T F
2 2 F T
样例输出
1
4
3
2
提示
【样例说明】
C=2, B=2的情况下,可以构造{1, 1},{1, 2},{2, 1},{2,2},其中
2 2 T T只能构造{1, 2},中奖概率为100%
2 2 F T只能构造{1, 2}, {2, 1},中奖概率为50%
2 2 T F只能构造{1, 2}, {1, 1},{2, 2},中奖概率为33%
2 2 F F可以构造全部,中奖概率25%
【数据规模和约定】
1<=n=1000, 1<=C<=50, 1<=B<=10, B<=C
这题作为第三题,真是水得可以。。。
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #define ll long long using namespace std; ll ty; int t,n,m,w,tot; char x[5],y[5]; ll f[15][55]; struct node { ll v; int id; }ans[1005]; void dp(int x) { for(int i=1;i<=n;i++) f[1][i]=1; //第几位以什么结尾 for(int i=2;i<=m;i++) for(int j=1;j<=n;j++) { f[i][j]=0; if(x==0) for(int k=1;k<=j;k++) f[i][j]=f[i][j]+f[i-1][k]; //重复 else for(int k=1;k<j;k++) f[i][j]=f[i][j]+f[i-1][k]; //不重复 } for(int i=1;i<=n;i++) ans[w].v=ans[w].v+f[m][i]; } bool cmp(node x,node y) { if(x.v!=y.v) return x.v<y.v;else return x.id<y.id; } int main() { cin>>t; for(w=1;w<=t;w++) { scanf("%d%d%s%s",&n,&m,x,y); if(x[0]=='F'&&y[0]=='F') //n^m { ty=1; for(int i=1;i<=m;i++) ty=ty*n; ans[w].v=ty; } if(x[0]=='F'&&y[0]=='T') //n*(n-1)*(n-2)*...(n-m+1) { ty=1; int lwq=n; for(int i=1;i<=m;i++) { ty=ty*lwq; lwq--; } ans[w].v=ty; } if(x[0]=='T'&&y[0]=='F') dp(0); //不下降 可重复 if(x[0]=='T'&&y[0]=='T') dp(1); //不下降 不重复 ans[w].id=w; } sort(ans+1,ans+t+1,cmp); for(int i=1;i<=t;i++) printf("%d\n",ans[i].id); return 0; }
相关文章推荐
- android attr.xml my style
- JavaScript Functions that Return Functions
- scanf的正确使用及技巧
- linux ohmyzsh shell主题包以及修改shell命令
- [JQ权威指南]使用全局函数post()向服务器请求数据
- 常用 音频视频格式
- Maven
- js写的3D玫瑰花
- web前端知识汇总21-40
- Logger4j的使用
- iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)--(转)
- iOS开发之CoreAnimation简介
- Swift编程(一):UITableView及自定义Cell的Xib
- 度熊的字典
- 虚函数和纯虚函数的区别
- mac IDEA 快捷键
- HDU4833 Best Financing (DP)
- 查找
- ios 调试过程捕获异常Stack 信息
- PAT 团体程序设计天梯赛-练习集 L1-020. 帅到没朋友