Rock-Paper-Scissors Tournament[HDU1148]
Posted PoorLitt1eThin9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rock-Paper-Scissors Tournament[HDU1148]相关的知识,希望对你有一定的参考价值。
Rock-Paper-Scissors Tournament
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2178 Accepted Submission(s): 693
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
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<queue>
#include<stack>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<fstream>
#include<sstream>
#include<iomanip>
#include <sstream>
using namespace std;
const int N=105;
int player[N][2]; // player[i][0]: win , player[i][1]: lose.
int n,k;
short judge(string a, string b)
{
if(a == b)
{
return 0;
}
short result;
if(a == "rock")
{
if(b == "scissors")
{
result = 1;
}
else if(b == "paper")
{
result = -1;
}
}
else if(a == "scissors")
{
if(b == "rock")
{
result = -1;
}
else if(b == "paper")
{
result = 1;
}
}
else
{
if(b == "scissors")
{
result = -1;
}
else if(b == "rock")
{
result = 1;
}
}
return result;
}
int main()
{
short ans;
string sa,sb;
int pa,pb;
bool first = true;
while(cin>>n && n)
{
if(!first)putchar(\'\\n\');
if(first)first=false;
memset(player,0,sizeof(player));
cin>>k;
while(k--)
{
cin>>pa>>sa>>pb>>sb;
ans = judge(sa,sb);
if(ans)
{
if(ans==1)//win
{
player[pa][0]++;
player[pb][1]++;
}
else//lose
{
player[pb][0]++;
player[pa][1]++;
}
}
}
for(int i=1; i<=n; i++)
{
int total = player[i][0]+player[i][1];
if(total>0)
{
printf("%.3f\\n",((float)player[i][0])/total);
}
else
{
printf("-\\n");
}
}
}
return 0;
}
以上是关于Rock-Paper-Scissors Tournament[HDU1148]的主要内容,如果未能解决你的问题,请参考以下文章
Rock-Paper-Scissors Tournament[HDU1148]
Gym 100015AAnother Rock-Paper-Scissors Problem
hdu 6088 Rikka with Rock-paper-scissors (2017 多校第五场 1004) 组合数学 + 数论 + 模意义下的FFT