题目链接

Problem Description

Rock-Paper-Scissors is game for two players, A and B, who each choose, independently of the other, one of rock, paper, or scissors. A player chosing paper wins over a player chosing rock; a player chosing scissors wins over a player chosing paper; a player chosing rock wins over a player chosing scissors. A player chosing the same thing as the other player neither wins nor loses.

A tournament has been organized in which each of n players plays k rock-scissors-paper games with each of the other players - k games in total. Your job is to compute the win average for each player, defined as w / (w + l) where w is the number of games won, and l is the number of games lost, by the player.

Input

Input consists of several test cases. The first line of input for each case contains 1 ≤ n ≤ 100 1 ≤ k ≤ 100 as defined above. For each game, a line follows containing p1, m1, p2, m2. 1 ≤ p1 ≤ n and 1 ≤ p2 ≤ n are distinct integers identifying two players; m1 and m2 are their respective moves ("rock", "scissors", or "paper"). A line containing 0 follows the last test case.

Output

Output one line each for player 1, player 2, and so on, through player n, giving the player's win average rounded to three decimal places. If the win average is undefined, output "-". Output an empty line between cases.

Sample Input

2 4
1 rock 2 paper
1 scissors 2 paper
1 rock 2 rock
2 rock 1 scissors
2 1
1 rock 2 paper
0

Sample Output

0.333
0.667 0.000
1.000

分析:

n个人进行k局比赛,但每局只有两个人能够进行比赛,最后输出来一个人获胜的总概率(即这个人胜利的局数除以他总共参加比赛的局数),如果一个人一次比赛也没有参加,则输出来一个"-"

代码:

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n,k,op=0;
while(~scanf("%d",&n)&&n!=0)
{
op++;
scanf("%d",&k);
int i,j;
int sum[105][105]= {0};
for(i=1; i<=k; i++)
{
int a,b;
char ch1[10],ch2[10];
scanf("%d%s%d%s",&a,ch1,&b,ch2);
if((ch1[0]=='p'&&ch2[0]=='r')||(ch1[0]=='s'&&ch2[0]=='p')||(ch1[0]=='r'&&ch2[0]=='s'))///第一个人赢
sum[a][b]++;
else if((ch1[0]=='r'&&ch2[0]=='p')||(ch1[0]=='p'&&ch2[0]=='s')||(ch1[0]=='s'&&ch2[0]=='r'))///第二个人赢
sum[b][a]++;
}
if(op!=1)
printf("\n");
double sum1,sum2,pj;
for(i=1; i<=n; i++)
{
sum1=0.0;
sum2=0.0;
for(j=1; j<=n; j++)
{
if(sum[i][j]!=0||sum[j][i]!=0)///两个人之间有进行比赛
{
sum1+=sum[i][j];
sum2+=sum[j][i];
}
} if(sum1==0&&sum2==0)///表示一个人一次比赛也没有参加
printf("-\n");
else
{
pj=(double(sum1)/double(sum1+sum2));
printf("%.3lf\n",pj);
}
}
}
return 0;
}

最新文章

  1. 开发日志_Jan.6.2017
  2. jQuery post数据至ashx
  3. Session和Cache的区别
  4. Oracle 服务手动启动关闭
  5. winform 指定浏览器打开链接
  6. [转载]SoapUI 参数化&amp;数据库连接
  7. 关于Servlet中的HttpServletRequest和HttpServletResponse
  8. WebStorm10下载、安装
  9. PDF.NET框架操作——工具应用(一)
  10. js监听输入框值的即时变化onpropertychange、oninput
  11. Query Profiler 和Explain 用法详解
  12. hibernate中fetch lazy
  13. ubuntu 14.04/15.10 安装基于eclipse的android app开发环境
  14. APK扩展文件介绍、功能及用法
  15. ISAPI和CGI限制中没有ASP.NET v4.0
  16. Web SCADA 电力接线图工控组态编辑器
  17. 如何通过CSS实现背景图片自动平铺或拉伸至整个屏幕(自适应大小)
  18. Delphi中打开网页连接的几种方法
  19. bat——批量删除文件文件夹
  20. Java基础知识盘点(二)- 集合篇

热门文章

  1. 1.&quot;问吧APP&quot;客户需求调查分析
  2. VSS2005清除管理员密码
  3. LCA的倍增算法
  4. MySQL用户授权
  5. 深入详解windows安全认证机制ntlm&amp;Kerberos
  6. Linux内核设计与实现第五周读书笔记
  7. HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧)
  8. 【agc004F】Namori
  9. linux 进程信号集合 sigset_t
  10. vector 一边遍历一边删除