【牛客 - 327G】处女座与复读机(可编辑距离问题,dp)
生活随笔
收集整理的這篇文章主要介紹了
【牛客 - 327G】处女座与复读机(可编辑距离问题,dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題干:
鏈接:https://ac.nowcoder.com/acm/contest/327/G
來源:牛客網
?
一天,處女座在牛客算法群里發了一句“我好強啊”,引起無數的復讀,可是處女座發現復讀之后變成了“處女座好強啊”。處女座經過調查發現群里的復讀機都是失真的復讀機,會固定的產生兩個錯誤。一個錯誤可以是下面的形式之一:
1.?????? 將任意一個小寫字母替換成另外一個小寫字母
2.?????? 在任意位置添加一個小寫字母
3.?????? 刪除任意一個字母
處女座現在在群里發了一句話,他收到了一個回應,他想知道這是不是一個復讀機。
輸入描述:
兩行 第一行是處女座說的話s 第二行是收到的回應t s和t只由小寫字母構成且長度小于100輸出描述:
如果這可能是一個復讀機輸出”YES”,否則輸出”NO”示例1
輸入
復制
abc abcde輸出
復制
YES說明
abc->abcd->abcde示例2
輸入
復制
abcde abcde輸出
復制
YES說明
abcde->abcdd->abcde備注:
只要能經過兩步變換就從s得到t就有可能是復讀機。解題報告:
? ? 轉化一下就是可編輯距離的裸題。
? ? 題目的意思是有兩個錯誤的才輸出YES,但是首先我們知道如果求出的ans=2那一定是可以的,但是對于ans=1:如果是替換,那我們可以先增加一步操作換成別的;如果是增加,那我們可以先增加一個別的然后再換成正解;如果是刪除,那我們可以先把要刪除的字符換成別的然后再刪除。總之ans=1的我們可以增加到ans=2,也就是輸出YES。ans=0的更不多說,也是輸出YES。
AC代碼:
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair using namespace std; const int MAX = 2e2 + 5; char s[MAX],t[MAX]; ll dp[MAX][MAX]; int main() {cin>>s+1;cin>>t+1;int len1 = strlen(s+1);int len2 = strlen(t+1);memset(dp,0x3f3f,sizeof dp);dp[0][0]=0;for(int i = 1; i<=len1; i++) {for(int j = 1; j<=len2; j++) {if(s[i] == t[j]) dp[i][j] = dp[i-1][j-1];else {ll tmp1 = dp[i][j] = dp[i-1][j-1]+1;//操作1ll tmp2 = dp[i-1][j]+1;ll tmp3 = dp[i][j-1]+1;dp[i][j] = min(tmp1,min(tmp2,tmp3));}}}if(dp[len1][len2] <= 2) puts("YES");else puts("NO");return 0 ; }?
總結
以上是生活随笔為你收集整理的【牛客 - 327G】处女座与复读机(可编辑距离问题,dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【2019牛客暑期多校训练营(第二场)-
- 下一篇: 美债规模创历史新高后,还有一大批在路上,