zoukankan      html  css  js  c++  java
  • [欧拉回路]无序字母对

    无序字母对

    题目描述

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

    输入

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

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

    输出

    输出满足要求的字符串。

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

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

    样例输入

    4
    aZ
    tZ
    Xt
    aX

    样例输出

    XaZtX

    提示

    【数据规模与约定】

    n<=1326

    代码:

     1 #include<cstdio>
     2 #define H 0x6ffffff
     3 int n, c = 0, map[60][60], d[60], ans[2000], s = H, ss = H, x, y, v, t = 0;
     4 char z[3];
     5 
     6 int turn(char c){
     7     return c - 'A' + 1;
     8 }
     9 
    10 char nrut(int a){
    11     return a + 'A' - 1;
    12 }
    13 
    14 void dfs(int i) { 
    15     for (int j = 1; j <= v; j++) {
    16           if(map[i][j]>0){
    17             map[i][j]--;
    18             map[j][i]--;
    19             dfs(j);
    20           }
    21     }
    22     ans[++c] = i;
    23 }
    24 
    25 int main() {
    26     scanf("%d", &n);
    27     for (int i = 1; i <= n; i++){
    28           scanf("%s", z + 1);
    29           x = turn(z[1]);
    30         y = turn(z[2]);
    31           map[x][y]++;
    32           map[y][x]++;
    33           d[x]++;
    34         d[y]++;
    35           if (x > v) {
    36             v = x;
    37         }
    38           if (y > v) {
    39             v = y;
    40         }
    41     }
    42     for (int i = 1; i <= v; i++) {
    43           if(d[i] % 2 == 1) {
    44             if(s == H) {
    45                 s = i;
    46             }
    47             t++;
    48           }
    49           if (d[i] > 0 && ss == H) {
    50             ss = i;
    51         }
    52     }
    53     if (t != 0 && t != 2) {
    54           printf("No Solution");
    55           return 0;
    56     }
    57     if (s == H) {
    58         dfs(ss);
    59     }
    60     else {
    61         dfs(s);
    62     }
    63     if (c - 1 != n) {
    64         printf("No Solution");
    65     }
    66     else {
    67           for (int i = c; i >= 1; i--) {
    68             printf("%c", nrut(ans[i]));
    69         }
    70     }
    71     return 0;
    72 }
  • 相关阅读:
    Fescar Quick Start
    Fescar Example-Spring Cloud
    IntelliJ IDEA 如何生成时序图?
    git 出现 fatal: refusing to merge unrelated histories 错误
    蘑菇街支付架构 PDF 下载
    优点缺点
    转 CentOS下php安装mcrypt扩展
    转 安装php时报gd相关的错误(gd_ctx.c)
    转 安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
    转 CentOS开启FTP及配置用户
  • 原文地址:https://www.cnblogs.com/GldHkkowo/p/8846553.html
Copyright © 2011-2022 走看看