Hiển thị các bài đăng có nhãn harder). Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn harder). Hiển thị tất cả bài đăng

Thứ Năm, 10 tháng 1, 2019

UVa 10903 - Rock - Paper - Scissors ... (count win+ losses , output win average)

Link:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=21&page=show_problem&problem=1844
Sol:
import sys
tc = 0
while True:
line = sys.stdin.readline().strip()
data = line.split()
n = int(data[0])
if n == 0:
break;
if tc != 0:
print()
tc += 1
pwon = [0] * (n+1)
plost = [0] * (n+1)
k = int(data[1])
g = k * ((n * (n - 1)) // 2)
for i in range(g):
line = sys.stdin.readline().strip()
data = line.split()
p1 = int(data[0])
m1 = data[1]
p2 = int(data[2])
m2 = data[3]
if m1 != m2:
if m1 == "rock":
if m2 == "scissors":
pwon[p1] += 1
plost[p2] += 1
else:
plost[p1] += 1
pwon[p2] += 1
if m1 == "scissors":
if m2 == "paper":
pwon[p1] += 1
plost[p2] += 1
else:
plost[p1] += 1
pwon[p2] += 1
if m1 == "paper":
if m2 == "rock":
pwon[p1] += 1
plost[p2] += 1
else:
plost[p1] += 1
pwon[p2] += 1
pwon.pop(0)
plost.pop(0)
for w, l in zip(pwon, plost):
if (w+l) != 0:
score = w / (w + l)
print("{:.3f}".format(score))
else:
print("-")

UVa 10813 - Traditional BINGO * (follow the problem description)

Link: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_problem&problem=1754
Sol:
#include <iostream>
using namespace std;
class mat {
public:
int m, n;
int **board;
int *rows;
int *cols;
int *diag;
mat(int m, int n) {
this->m = m;
this->n = n;
board = new int*[m];
for (int i = 0; i < m; i++) {
board[i] = new int[n];
}
rows = new int[m];
cols = new int[n];
diag = new int[2];
reset();
}
void set(int i, int j, int c) {
board[i][j] = c;
}
bool checkNumber(int number) {
int col = (number -1) / 15;
int i = 0;
bool found = false;
for (i = 0; i < m; i++) {
if (board[i][col] == number) {
rows[i]--;
cols[col]--;
if (i == col)
diag[0]--;
if (i == (n-col-1))
diag[1]--;
found = true;
board[i][col] = 0;
break;
}
}
if (found) {
if (rows[i] == 0)
return true;
if (cols[col] == 0)
return true;
if (diag[0] == 0)
return true;
if (diag[1] == 0)
return true;
}
return false;
}
bool isOnBoard(int i, int j) {
return i >= 0 && i < m && j >= 0 && j < n;
}
void reset() {
for (int i = 0; i < m; i++) {
rows[i] = m;
cols[i] = n;
for (int j = 0; j < n; j++)
board[i][j] = 0;
}
rows[m/2]--; // remove the guess for the center square
cols[m/2]--;
diag[0] = diag[1] = 4;
}
void print() {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << board[i][j] << " ";
}
cout << endl;
}
cout << "rows: " << endl;
for (int i = 0; i < m; i++)
cout << rows[i] << " ";
cout << endl;
cout << "cols: " << endl;
for (int i = 0; i < n; i++)
cout << cols[i] << " ";
cout << endl;
cout << "diag: " << diag[0] << " " << diag[1] << endl;
}
~mat() {
for (int i = 0; i < m; i++) {
delete [] board[i];
}
delete [] board;
delete [] rows;
delete [] cols;
delete [] diag;
}
};
int main() {
int tc, m = 5, n = 5, number;
int c;
mat ticket(m, n);
cin >> tc;
while (tc--) {
ticket.reset();
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++) {
if (!(i == 2 && j == 2)) {
cin >> c;
ticket.set(i, j, c);
}
}
bool winner = false;
int n = 0;
for (int i = 0; i < 75; i++) {
cin >> number;
if (!winner) {
winner = ticket.checkNumber(number);
if (winner) {
n = i + 1;
}
}
//ticket.print();
}
cout << "BINGO after " << n << " numbers announced" << endl;
}
}

Bài G - Educatioal Round 62

Đề bài: Bạn được cho 1 đồ thị vô hướng đặc biệt. Nó bao gồm $2n$ đỉnh được đánh số từ 1 đến 2n. Dưới đây là một số đặc tính của đồ thị: + ...