csu1513
来源:互联网 发布:云计算教育 编辑:程序博客网 时间:2024/05/29 04:25
题意:点球大战~~~
题意:两队点球,分为a队跟b队,a队踢一次b队踢一次,两个队伍加起来一个踢十次,假如可以使比赛先结束,就是胜负已经确定了就没必要继续下面的踢球了。例如 当每个队伍踢球三次 比分是0-3,这时候就没必要继续踢下去了,因为还能踢两次球,a队伍已经不可能赢了。所以比分直接是0-3结束了这场比赛。
思路:dfs搜索枚举各种进球与不进球的状态 加上一个剪枝条件 当枚举的比分a大于或者b大于了输入统计那个比分那么这种状态直接不要
#include<stdio.h>#include<stdlib.h>#include<string.h>double a[10],b[10];double ans;int zx,zy;void dfs(int x,int y,double ga,double gb,int nx,int ny){ if(x>zx||y>zy) return ; if(nx==5&&ny==5) { if(x==zx&&y==zy) { ans+=ga*gb; } return ; } if(x<y) { if(y-x>5-nx)//当相差的比分大于剩下可踢球的次数,则不需要比了直接统计 { if(x==zx&&y==zy) { ans+=ga*gb; } return ; } } if(x>y) { if(x-y>5-ny) { if(x==zx&&y==zy) { ans+=ga*gb; } return ; } } if(x+1>y) { if(x+1-y<=5-ny) dfs(x+1,y+1,ga*a[nx+1],gb*b[ny+1],nx+1,ny+1); else//x踢一次进了大于b队剩下的踢球次数 { if(x+1==zx&&y==zy) { ans+=ga*a[nx+1]*gb; } } } else { dfs(x+1,y+1,ga*a[nx+1],gb*b[ny+1],nx+1,ny+1); } if(x+1>y) { if(x+1-y<=5-ny) dfs(x+1,y,ga*a[nx+1],gb*(1-b[ny+1]),nx+1,ny+1); } else { dfs(x+1,y,ga*a[nx+1],gb*(1-b[ny+1]),nx+1,ny+1); } if(x<y) { if(y-x<=5-nx-1) dfs(x,y+1,ga*(1-a[nx+1]),gb*b[ny+1],nx+1,ny+1); else { if(x==zx&&y==zy) { ans+=ga*(1-a[nx+1])*gb; } } } else { dfs(x,y+1,ga*(1-a[nx+1]),gb*b[ny+1],nx+1,ny+1); } if(x<y) { if(y-x<=5-nx-1) dfs(x,y,ga*(1-a[nx+1]),gb*(1-b[ny+1]),nx+1,ny+1); } else { dfs(x,y,ga*(1-a[nx+1]),gb*(1-b[ny+1]),nx+1,ny+1); }}int main(){ int xxx=1; while(scanf("%lf",&a[1])!=EOF) { for(int i=2;i<=5;i++) { scanf("%lf ",&a[i]); } for(int i=1;i<=5;i++) { scanf("%lf ",&b[i]); } scanf("%d-%d",&zx,&zy); ans=0; dfs(0,0,1,1,0,0);//表示a队得分b队得分a队概率b队概率,a队踢球的次数,b队踢球的次数。 printf("Case %d: %.2lf%%\n",xxx++,ans*100); }}
阅读全文
1 0
- csu1513
- CSU1513 Kick the ball!
- DFS csu1513 Kick the ball!
- CSU1513 Kick the ball! 湖南10届省赛 dfs
- 微信 invalid code 40029
- Poj-3669 Meteor Shower--Bfs经典例题
- HDU1393 Weird Clock
- NYOJ 括号配对问题用容器来解决 酒馆浪人的博客
- Bootstrap Table 中文文档(完整翻译版)
- csu1513
- 每个人都应该知道的25个大数据术语
- Mac下的plist纹理图切图工具(命令行)
- python 执行系统命令比较
- Android 自定义数字圆环
- .net 的Excel导入问题
- NodeJS使用ES6
- sqlite3创建数据库表
- TCP带外数据---紧急模式