冰墩墩和冰壶 | ||
Accepted : 126 | Submit : 1122 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB | |
冰墩墩和冰壶题目描述冰壶是被誉为“冰面上的国际象棋”,其计分规则是各自投壶,最后在大本营内,你有几个壶离圆心比对方的所有的壶离圆心更近,就得几分。 比如红方有两个壶,分别在坐标(1,1),(−2,1);黄方也有两个壶,分别在(1,0),(0,2)。 由于黄方的第一个壶离圆心更近,而黄方的第二个壶没有红方第一个壶近,所以最后黄方得1分,红方不得分。 现在冰墩墩每次都选择红方,它想知道它到底得了多少分? 1. 冰墩墩最近的壶不比对方的最近的壶远,那么冰墩墩赢,否则冰墩墩输。 2. 赢的一方的壶比输的一方最近的壶更近的壶数,即得分。 输入格式第一行是一个整数T(1≤T≤3000),表示样例的个数。 每个样例的第一行是一个整数n(1≤n≤16),表示冰壶的数量。 以后每行一个冰壶的信息,为三个部分,第一个是一个字符,表示冰壶的颜色(R表示红色,Y表示黄色),后面是两个整数(数值的绝对值不超过1000),表示冰壶的坐标。 输入数据保证不会出现两个壶在同一个坐标。 输出格式依次输出每个样例的结果。结果为一行,分为两个部分,如果没有丢分,输出“Win”和分数,否则输出”Lose”和分数,两者之间相隔一个空格。 样例输入3 4 Y 1 1 R -2 1 R 1 0 Y 0 2 4 Y 1 1 R 0 1 R 1 0 Y 0 2 4 Y 1 1 Y 2 2 R 2 1 R 4 4 样例输出Win 1 Win 2 Lose 1
|
Source Code
Problem: 1512 User: 202205567311
Memory: 1456K Time: 31MS
Language: G++ Result: Accepted
Source Code
#include<stdio.h>
int digim2(int a, int b)
{
return a * a + b * b;
}
int main()
{
int k, i, n, t1, t2;
char team;
int minrt, minyt, cntr, cnty, cntcore ;
int bh[2][20] = {0};
scanf("%d", &k);
while (k--)
{
cntr = 0, cnty = 0, cntcore = 0, minrt = 2100000000, minyt = 2100000000;
scanf("%d", &n);
while (n--)
{
scanf(" %c %d %d", &team, &t1, &t2);
if (team == 'R')
{
bh[0][++cntr] = digim2(t1, t2);
minrt = (bh[0][cntr] < minrt) ? bh[0][cntr] : minrt;
}
else if (team == 'Y')
{
bh[1][++cnty] = digim2(t1, t2);
minyt = (bh[1][cnty] < minyt) ? bh[1][cnty] : minyt;
}
}
if (minrt <= minyt)
{
printf("Win");
for (i = 1; i <= cntr; ++i)
{
if (bh[0][i] < minyt)
{
cntcore++;
}
}
printf(" %d\n", cntcore);
}
else
{
printf("Lose");
for (i = 1; i <= cnty; ++i)
{
if (bh[1][i] < minrt)
{
cntcore++;
}
}
printf(" %d\n", cntcore);
}
}
return 0;
}