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

      1 #include <bits/stdc++.h>
      2 #define _for(i,a,b) for(int i = (a);i < b;i ++)
      3 #define _rep(i,a,b) for(int i = (a);i > b;i --)
      4 #define INF 0x3f3f3f3f
      5 #define pb push_back
      6 typedef long long ll;
      7 using namespace std;
      8 inline ll read()
      9 {
     10     ll ans = 0;
     11     char ch = getchar(), last = ' ';
     12     while(!isdigit(ch)) last = ch, ch = getchar();
     13     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
     14     if(last == '-') ans = -ans;
     15     return ans;
     16 }
     17 inline void write(ll x)
     18 {
     19     if(x < 0) x = -x, putchar('-');
     20     if(x >= 10) write(x / 10);
     21     putchar(x % 10 + '0');
     22 }
     23 
     24 int sc4(char c)
     25 {
     26     if(islower(c))
     27         return c-'a'+26;
     28     else
     29         return c-'A';
     30 }
     31 int sc3(int k)
     32 {
     33     if(k<=25)
     34         return 'A'+k;
     35     else
     36         return 'a'+k-26;
     37 }
     38 int N;
     39 vector<vector<int>> v(100);
     40 int vis[100][100];
     41 string ans;
     42 bool dfs(int nw)
     43 {
     44     if(ans.size()==N+1)
     45         return true;
     46 
     47     _for(i,0,v[nw].size())
     48     {
     49         if(vis[nw][v[nw][i]]>0)
     50         {
     51             vis[nw][v[nw][i]] --;
     52             vis[v[nw][i]][nw] --;
     53             ans += sc3(v[nw][i]);
     54             if(dfs(v[nw][i])) return true;
     55             vis[v[nw][i]][nw] ++;
     56             vis[nw][v[nw][i]] ++;
     57             ans.pop_back();
     58         }
     59     }
     60     return false;
     61 }
     62 
     63 bool solve(int st)
     64 {
     65     ans += sc3(st);
     66     if(dfs(st))
     67         return true;
     68     ans.pop_back();
     69     return false;
     70 }
     71 
     72 void Sort()
     73 {
     74     _for(i,0,99)
     75     sort(v[i].begin(),v[i].end());
     76 }
     77 int judge()
     78 {
     79     int odd = 0;
     80     int st = -1;
     81     _for(i,0,60)
     82     {
     83         int sum = 0;
     84         _for(j,0,60)
     85         {
     86             sum += vis[i][j];
     87         }
     88         if(sum&0x1)
     89         {
     90             if(st==-1)
     91                 st = i;
     92             odd ++;
     93         }
     94     }
     95     if(odd!=0 && odd!=2)
     96         return -1;
     97     else if(!odd)
     98         return 0;
     99     else
    100         return st;
    101 }
    102 int main()
    103 {
    104     N = read();
    105 
    106     _for(i,0,N)
    107     {
    108         char c1,c2;
    109         cin >> c1 >> c2;
    110         v[sc4(c1)].pb(sc4(c2));
    111         v[sc4(c2)].pb(sc4(c1));
    112         vis[sc4(c1)][sc4(c2)]++;
    113         vis[sc4(c2)][sc4(c1)]++;
    114     }
    115 
    116     int st = judge();
    117     if(st==-1)
    118     {
    119         printf("No Solution
    ");
    120         return 0;
    121     }
    122     Sort();
    123 
    124     if(!solve(st))
    125         printf("No Solution
    ");
    126     else
    127         cout << ans << endl;
    128 
    129     return 0;
    130 }
  • 相关阅读:
    ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
    MVC Razor模板引擎 @RenderBody、@RenderPage、@RenderSection及Html.RenderPartial、Html.RenderAction
    二叉树的建立&&前中后遍历(递归实现)&&层次遍历
    实现一个简单的散列表(HashMap)
    单向链表的删除及插入操作(以头插入法建立单向链表)
    单向链表的建立(头插入法)
    单向链表的建立(尾部插入法)
    链式队列(单向列表实现)
    顺序队列(数组实现)
    链式栈(单向链表实现)
  • 原文地址:https://www.cnblogs.com/Asurudo/p/11506181.html
Copyright © 2011-2022 走看看