CodeForces 782D Innokenty and a Football League

来源:互联网 发布:网络嗅探器5.5.0 编辑:程序博客网 时间:2024/06/07 01:26

CodeForces 782D Innokenty and a Football League

题目描述:

N 支球队,每支球队有队伍名和地区名,球队的简称以如下方式确定:

  1. 队伍名的前三个字母;
  2. 若这样与另一支球队的简称重复,则两支球队的简称都改成球队队伍名的前两个字母和地区名的第一个字母。

要求输出方案。

题解:

按题意搜索即可,实现上有一些小细节。

题目链接: vjudge 原网站

代码:

#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <climits>#include <algorithm>using namespace std;#define MAXN 1010static int N, tag[MAXN], vis[MAXN];static char name[MAXN][4], S1[100], S2[100];void dfs(int x){    if (vis[x]) return ; else vis[x] = 1;    for (int y = 0; y < N; y++)        if (tag[y] == 2 && name[x][0] == name[y][0] && name[x][1] == name[y][1] && name[x][3] == name[y][2])            tag[y] = 3, dfs(y);}int main(){    scanf("%d", &N);    for (int i = 0; i < N; i++)        scanf("%s%s", S1, S2), memcpy(name[i], S1, 3), name[i][3] = S2[0], tag[i] = 2;    for (int i = 0; i < N; i++)        for (int j = 0; j < N; j++)            if (i != j && name[i][0] == name[j][0] && name[i][1] == name[j][1] && name[i][2] == name[j][2])                tag[i] = tag[j] = 3;    for (int i = 0; i < N; i++) if (tag[i] == 3) dfs(i);    for (int i = 0; i < N; i++)        for (int j = 0; j < N; j++)            if (i != j && name[i][0] == name[j][0] && name[i][1] == name[j][1] && name[i][tag[i]] == name[j][tag[j]])                return printf("NO\n"), 0;    printf("YES\n");    for (int i = 0; i < N; i++) printf("%c%c%c\n", name[i][0], name[i][1], name[i][tag[i]]);    return 0;}

提交记录(AC / Total = 1 / 1):

Run ID Remote Run ID Time(ms) Memory(kb) Result Submit Time 8499170 25657411 15 1860 AC 2017-03-20 08:37:06
0 0
原创粉丝点击