• Codeforces Round #403 D. Innokenty and a Football League


    题目链接:Codeforces Round #403 D. Innokenty and a Football League

    题意:

    某人需要给若干球队选择队名缩写。已知每个球队的名字必然是 <team name> <hometown name> 的形式。取队名缩写的规则是固定的,只有两种:

    1. 选择 team name 的前三个字母作为队名缩写
    2. 选择 team name 的前两个字母与 hometown name 的首字母组成队名缩写。

    每个队的队名缩写都可以从两种中任选一种,问能够使得每个队最终的队名缩写均不同。

    同时,题面中有额外要求,如果 x 的第一类队名缩写为 x.fst ,第二类队名缩写为 x.sec。若 x 选择了 x.sec 作为最终的队名缩写,那么其他队伍均不能以 y.fst 作为最终的队名缩写,如果 x.fst == y.fst 的话。当然,如果是 y.sec ==x.fst 的话,则不触发这一禁制规则。

    题解:

    我们先分析一下题意:只要x.fst == y.fst,那么x,y都只能选第二个名字。

    所以我们就先预处理所有的第一个名字相等的名字,然后剩下的暴搜一下就行了。

    只要搜出一种解马上就弹出,这样复杂度不会很大。

    只跑了78ms

     1 #include<bits/stdc++.h>
     2 #define F(i,a,b) for(int i=a;i<=b;++i)
     3 using namespace std;
     4 
     5 const int N=1007;
     6 
     7 int n,vis[N],fg;
     8 char a[N],b[N],ans[N][6];
     9 struct dt
    10 {
    11     char a[5],b[5];
    12     int idx;
    13     bool operator <(const dt &bs)const
    14     {
    15         int tmp=strcmp(a,bs.a);
    16         return tmp==0?strcmp(b,bs.b)<0:tmp<0;
    17     }
    18 }s[N];
    19 map<string,int>mpall;
    20 
    21 void dfs(int i)
    22 {
    23     if(i==n+1)fg=1;
    24     if(fg)return;
    25     if(vis[i])dfs(i+1);
    26     else
    27     {
    28         if(mpall[s[i].a])
    29         {
    30             if(mpall[s[i].b])return;
    31             strcpy(ans[s[i].idx],s[i].b);
    32             mpall[s[i].b]=1;
    33             dfs(i+1);
    34             mpall[s[i].b]=0;
    35         }else
    36         {
    37             strcpy(ans[s[i].idx],s[i].a);
    38             mpall[s[i].a]=1;
    39             dfs(i+1);
    40             if(fg)return;
    41             mpall[s[i].a]=0;
    42             if(mpall[s[i].b])return;
    43             strcpy(ans[s[i].idx],s[i].b);
    44             mpall[s[i].b]=1;
    45             dfs(i+1);
    46             mpall[s[i].b]=0;
    47         }
    48     }
    49 }
    50 
    51 void work()
    52 {
    53     F(i,1,n)
    54     {
    55         if(strcmp(s[i].a,s[i-1].a)==0)
    56         {
    57             if(strcmp(s[i].b,s[i-1].b)==0)return;
    58             vis[i]=vis[i-1]=1;
    59             strcpy(ans[s[i].idx],s[i].b);
    60             strcpy(ans[s[i-1].idx],s[i-1].b);
    61             mpall[ans[s[i].idx]]=1;
    62             mpall[ans[s[i-1].idx]]=1;
    63         }
    64     }
    65     dfs(1);
    66 }
    67 
    68 int main()
    69 {
    70     scanf("%d",&n);
    71     F(i,1,n)
    72     {
    73         scanf("%s%s",a,b);
    74         s[i].idx=i;
    75         s[i].a[0]=s[i].b[0]=a[0];
    76         s[i].a[1]=s[i].b[1]=a[1];
    77         s[i].a[2]=a[2],s[i].b[2]=b[0];
    78         s[i].a[3]=s[i].b[3]=0;
    79     }
    80     sort(s+1,s+1+n);
    81     work();
    82     if(fg==1)
    83     {
    84         puts("YES");
    85         F(i,1,n)printf("%s
    ",ans[i]);
    86     }else puts("NO");
    87     return 0;
    88 }
    View Code
  • 相关阅读:
    【转载】零基础学Support Vector Machine(SVM)
    【转载】前向传播算法(Forward propagation)与反向传播算法(Back propagation)
    python 3.5 解决csv 读入中的'utf-8' codec can't decode办法
    pandas用法大全
    南阳理工OJ 题目168.房间安排问题与题目14.会场安排问题
    C++中IO设置数字精度问题
    C++中memset()函数笔记
    Java 编程命名规范
    数据类型内存分配--js基础
    对象--js基础
  • 原文地址:https://www.cnblogs.com/bin-gege/p/6510880.html
Copyright © 2020-2023  润新知