• 计蒜客-A1594 封印之门


    链接:https://nanti.jisuanke.com/t/A1594

    思路:Floyd求最短路模板题,最后把两串对应字符间最短路相加即可,注意输入时两个相同字符不需要考虑,inf设为0x7ffffff防止爆int

    代码:

     1 #include<bits/stdc++.h>
     2 #define inf 0x7ffffff
     3 #define ms(a) memset(a,0,sizeof(a))
     4 using namespace std;
     5 typedef long long ll;
     6 
     7 const int M = int(1e5) + 5;
     8 const int mod = int(1e9) + 7;
     9 
    10 int dis[26][26];
    11 void floyd(){
    12     for(int k=0;k<26;k++){
    13         for(int i=0;i<26;i++){
    14             for(int j=0;j<26;j++){
    15                 dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    16             }
    17         }
    18     }
    19 }
    20 int main(){
    21     for(int i=0;i<26;i++){
    22         for(int j=0;j<26;j++){
    23             if(i==j) dis[i][j]=0;
    24             else dis[i][j]=inf;
    25         }
    26     }
    27     string a,b;
    28     cin>>a>>b;
    29     int k;
    30     cin>>k;
    31     for(int i=0;i<k;i++){
    32         char c,d;
    33         cin>>c>>d;
    34         if(c!=d)
    35         dis[c-'a'][d-'a']=1;
    36     }
    37     floyd();
    38     int ans=0;
    39     for(int i=0;i<a.size();i++){
    40         if(dis[a[i]-'a'][b[i]-'a']==inf){
    41             cout<<-1<<endl;
    42             return 0;
    43         }
    44         else ans+=dis[a[i]-'a'][b[i]-'a'];
    45     }
    46     cout<<ans<<endl;
    47     return 0;
    48 }
  • 相关阅读:
    POJ2559/HDU1506 Largest Rectangle in a Histogram (cartesian tree)
    POJ2201 Cartesian Tree (cartesian tree)
    一本通1007
    一本通1006
    一本通1005
    一本通1004
    一本通1003
    一本通1002
    一本通1001
    一本通1000
  • 原文地址:https://www.cnblogs.com/harutomimori/p/12770613.html
Copyright © 2020-2023  润新知