zoukankan      html  css  js  c++  java
  • P1341 无序字母对

    题目描述

    给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。

    输入输出格式

    输入格式:

    第一行输入一个正整数n。

    以下n行每行两个字母,表示这两个字母需要相邻。

    输出格式:

    输出满足要求的字符串。

    如果没有满足要求的字符串,请输出“No Solution”。

    如果有多种方案,请输出前面的字母的ASCII编码尽可能小的(字典序最小)的方案

    输入输出样例

    输入样例#1: 复制
    4
    aZ
    tZ
    Xt
    aX
    输出样例#1: 复制
    XaZtX
     

    说明

    【数据规模与约定】

    不同的无序字母对个数有限,n的规模可以通过计算得到。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define inf 2147483647
    const ll INF = 0x3f3f3f3f3f3f3f3fll;
    #define ri register int
    template <class T> inline T min(T a, T b, T c)
    {
        return min(min(a, b), c);
    }
    template <class T> inline T max(T a, T b, T c)
    {
        return max(max(a, b), c);
    }
    template <class T> inline T min(T a, T b, T c, T d)
    {
        return min(min(a, b), min(c, d));
    }
    template <class T> inline T max(T a, T b, T c, T d)
    {
        return max(max(a, b), max(c, d));
    }
    #define scanf1(x) scanf("%d", &x)
    #define scanf2(x, y) scanf("%d%d", &x, &y)
    #define scanf3(x, y, z) scanf("%d%d%d", &x, &y, &z)
    #define scanf4(x, y, z, X) scanf("%d%d%d%d", &x, &y, &z, &X)
    #define pi acos(-1)
    #define me(x, y) memset(x, y, sizeof(x));
    #define For(i, a, b) for (int i = a; i <= b; i++)
    #define FFor(i, a, b) for (int i = a; i >= b; i--)
    #define bug printf("***********
    ");
    #define pb push_back
    const int N = 505;
    const int mod=100003;
    // name*******************************
    int du[N];
    int G[N][N];
    stack<int>S;
    int n;
    int s;
    char str[10];
    // function******************************
    void dfs(int x)
    {
        For(i,1,52)
        {
            if(G[x][i])
            {
                G[x][i]--;
                G[i][x]--;
                dfs(i);
            }
        }
        S.push(x);
    }
    
    //***************************************
    int main()
    {
    //    ios::sync_with_stdio(0);
    //    cin.tie(0);
        // freopen("test.txt", "r", stdin);
        //  freopen("outout.txt","w",stdout);
        cin>>n;
        For(i,1,n)
        {
            int a,b;
            scanf("%s",str);
            if(str[0]<='Z')a=str[0]-'A'+1;
            else a=str[0]-'a'+27;
            if(str[1]<='Z')b=str[1]-'A'+1;
            else b=str[1]-'a'+27;
            G[a][b]++;
            G[b][a]++;
            du[a]++;
            du[b]++;
            s=min(a,b);
        }
        int cnt=0;
        FFor(i,52,1)
        {
            if(du[i]&&du[i]%2)
            {
                s=i;
                cnt++;
            }
            if(cnt>2)
            {
                cout<<"No Solution";
                return 0;
            }
        }
        dfs(s);
    
        while(!S.empty())
        {
            int x=S.top();
            if(x<=26)cout<<char('A'+x-1);
            else cout<<char('a'+x-27);
            S.pop();
        }
    
        return 0;
    }
  • 相关阅读:
    在Windows10上安装Linux子系统
    《ln--软连接》--linux命令
    【转】最详细的Log4J使用教程
    7 str字符串的内置函数
    6.1 range创建数值序列
    6 int数值类型的内置函数
    linux shell 字符串操作(长度,查找,截取,替换)详解
    awk 字符串处理函数
    Shell字符串截取
    5 python基本数据类型
  • 原文地址:https://www.cnblogs.com/planche/p/8724649.html
Copyright © 2011-2022 走看看