The game of billiards involves two players knocking 3 balls around
on a green baize table. Well, there is more to it, but for our
purposes this is sufficient.
The game consists of several rounds and in each round both players
obtain a score, based on how well they played. Once all the rounds
have been played, the total score of each player is determined by
adding up the scores in all the rounds and the player with the higher
total score is declared the winner.
The Siruseri Sports Club organises an annual billiards game where
the top two players of Siruseri play against each other. The Manager
of Siruseri Sports Club decided to add his own twist to the game by
changing the rules for determining the winner. In his version, at the
end of each round the leader and her current lead are calculated. Once
all the rounds are over the player who had the maximum lead at the
end of any round in the game is declared the winner.
Consider the following score sheet for a game with 5 rounds:
Round Player 1 Player 2 1 140 82 2 89 134 3 90 110 4 112 106 5 88 90
The total scores of both players, the leader and the lead after
each round for this game is given below:
Round Player 1 Player 2 Leader Lead 1 140 82 Player 1 58 2 229 216 Player 1 13 3 319 326 Player 2 7 4 431 432 Player 2 1 5 519 522 Player 2 3
The winner of this game is Player 1 as he had the maximum lead (58
at the end of round 1) during the game.
根据规则计算最后的胜者是谁:当前局结束时候领先分数最多者胜。
本题依然是输入数据十分大。算法不难,处理好输入数据就行。都是使用fread和getchar比较稳妥了。
#include <stdio.h> int TheLeadGame() { int T, n, lead = 0, leader, a = 0, b = 0, c = 0, d = 0; scanf("%d\n", &T); char buffer[100000]; bool one = true; if ((n = fread(buffer, 1, 100000, stdin)) > 0) { for (int i = 0; i < n; i++) { if (one && buffer[i] != ‘ ‘ && buffer[i] != ‘\n‘) a = a * 10 + buffer[i] - ‘0‘; else if (buffer[i] != ‘ ‘ && buffer[i] != ‘\n‘) b = b * 10 + buffer[i] - ‘0‘; if (buffer[i] == ‘ ‘) one = false; else if (buffer[i] == ‘\n‘ || i + 1 == n) { one = true; c += a;//player1 total scores a = 0;//reset d += b;//player2 total scores b = 0;//reset if (c < d)//calculate { if ( d - c > lead ) { lead = d - c; leader = 2; } } else { if ( c - d > lead ) { lead = c - d; leader = 1; } } } } } printf("%d %d\n", leader, lead); return 0; }
codechef The Lead Game 题解,布布扣,bubuko.com