#P2654. Rock-Paper-Scissors Tournament

Rock-Paper-Scissors Tournament

题目描述

石头剪刀布是一款双人游戏,玩家A和玩家B各自独立选择石头、剪刀或布中的一种。选择布的玩家击败选择石头的玩家,选择剪刀的玩家击败选择布的玩家,选择石头的玩家击败选择剪刀的玩家。若双方选择相同,则不分胜负。

现组织了一场锦标赛,其中 n n 名玩家中的每一位都与其他所有玩家进行 k k 场石头剪刀布游戏——总共有 k×n×(n1)/2 k \times n \times (n-1)/2 场比赛。你的任务是计算每位玩家的胜率,其定义为赢得的比赛数 w w 除以(赢的比赛数 w w + 输的比赛数 l l ),即 w/(w+l) w/(w+l)

输入

输入包含多个测试用例。每个测试用例的第一行包含两个整数 1n100 1 \leq n \leq 100 1k100 1 \leq k \leq 100 ,含义如上所述。接下来,对于每场比赛,有一行输入包含 p1 p_1 m1 m_1 p2 p_2 m2 m_2 :其中 1p1n 1 \leq p_1 \leq n 1p2n 1 \leq p_2 \leq n 是两个不同的玩家编号,m1 m_1 m2 m_2 是他们各自的选择("rock"、"scissors"或"paper")。最后一个测试用例后,输入一行包含 0 0

输出

对于每个测试用例,按玩家1到玩家 n n 的顺序,每行输出该玩家的胜率,四舍五入保留三位小数。若胜率未定义(即 w+l=0 w + l = 0 ),则输出“-”。测试用例之间输出一个空行。

输入数据示例1

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  

输出数据示例1

0.333  
0.667  

0.000  
1.000  

提示

输入数据量较大,建议使用scanf读取输入。

来源

Waterloo local 2005.09.17