zoukankan      html  css  js  c++  java
  • 牛客寒假算法基础集训营2 处女座与复读机(模拟 or 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就有可能是复读机。

    题解:DP是真简单啊嘤嘤嘤 模拟一定要用string写字符串
     1 import java.util.Scanner;
     2  
     3 public class Main { 
     4     static final int maxn = 105;
     5     static int [][] dp = new int[105][105];
     6     static String s,t;
     7     public static void main(String[] args) {
     8         Scanner cin = new Scanner(System.in);
     9         s = cin.next();
    10         t = cin.next();
    11         int len1 = s.length();
    12         int len2 = t.length();
    13         for(int i=1;i<=len1;i++)
    14             dp[i][0] = i;
    15         for(int j=1;j<=len2;j++)
    16             dp[0][j] = j;
    17         for(int i=1;i<=len1;i++) {
    18             for(int j=1;j<=len2;j++) {
    19                 if(s.charAt(i-1)==t.charAt(j-1))
    20                     dp[i][j] = dp[i-1][j-1];
    21                 else
    22                     dp[i][j] = Math.min(dp[i][j-1],Math.min(dp[i-1][j],dp[i-1][j-1]))+1;
    23             }
    24         }
    25         if(dp[len1][len2]>2)
    26             System.out.println("NO");
    27         else
    28             System.out.println("YES");
    29     }
    30 }

    官方题解的模拟:

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 string a,b;
      4  
      5 int main()
      6 {
      7     cin>>a>>b;
      8     if (fabs((int)a.length()-(int)b.length())>2)
      9     {
     10         puts("NO");
     11     }
     12     else
     13     {
     14         if (b.length()==a.length()+2)
     15         {
     16             int can=0;
     17             for (int i=0;i<b.length();i++)
     18             {
     19                 for (int j=i+1;j<b.length();j++)
     20                 {
     21                     string s="";
     22                     for (int k=0;k<b.length();k++)
     23                     {
     24                         if (k!=i && k!=j) s.push_back(b[k]);
     25                     }
     26                     if (a==s) can=1;
     27                 }
     28             }
     29             if (can==1) puts("YES");
     30             else puts("NO");
     31         }
     32         else if ((int)b.length()==(int)a.length()-2)
     33         {
     34             swap(a,b);
     35             int can=0;
     36             for (int i=0;i<b.length();i++)
     37             {
     38                 for (int j=i+1;j<b.length();j++)
     39                 {
     40                     string s="";
     41                     for (int k=0;k<b.length();k++)
     42                     {
     43                         if (k!=i && k!=j) s.push_back(b[k]);
     44                     }
     45                     if (a==s) can=1;
     46                 }
     47             }
     48             if (can==1) puts("YES");
     49             else puts("NO");
     50         }
     51         else if (b.length()==a.length()+1)
     52         {
     53             int can=0;
     54             for (int i=0;i<b.length();i++)
     55             {
     56                 string s="";
     57                 for (int j=0;j<b.length();j++)
     58                 {
     59                     if (j!=i) s.push_back(b[j]);
     60                 }
     61                 int cnt=0;
     62                 for (int i=0;i<a.length();i++)
     63                 {
     64                     if (a[i]!=s[i]) cnt++;
     65                 }
     66                 if (cnt<=1) can=1;
     67             }
     68             if (can==1) puts("YES");
     69             else puts("NO");
     70         }
     71         else if ((int)b.length()==(int)a.length()-1)
     72         {
     73             swap(a,b);
     74             int can=0;
     75             for (int i=0;i<b.length();i++)
     76             {
     77                 string s="";
     78                 for (int j=0;j<b.length();j++)
     79                 {
     80                     if (j!=i) s.push_back(b[j]);
     81                 }
     82                 int cnt=0;
     83                 for (int i=0;i<a.length();i++)
     84                 {
     85                     if (a[i]!=s[i]) cnt++;
     86                 }
     87                 if (cnt<=1) can=1;
     88             }
     89             if (can==1) puts("YES");
     90             else puts("NO");
     91         }
     92         else
     93         {
     94             int can=0;
     95             for (int i=0;i<b.length();i++)
     96             {
     97                 for (int j=i+1;j<b.length();j++)
     98                 {
     99                     int cnt=0;
    100                     for (int k=0;k<b.length();k++)
    101                     {
    102                         if (k==i || k==j) continue;
    103                         if (a[k]!=b[k]) cnt++;
    104                     }
    105                     if (cnt==0) can=1;
    106                 }
    107             }
    108             for (int i=0;i<b.length();i++)
    109             {
    110                 for (int j=0;j<b.length();j++)
    111                 {
    112                     string s="";
    113                     string t="";
    114                     for (int k=0;k<b.length();k++)
    115                     {
    116                         if (k!=i) s.push_back(a[k]);
    117                     }
    118                     for (int k=0;k<b.length();k++)
    119                     {
    120                         if (k!=j) t.push_back(b[k]);
    121                     }
    122                     if (s==t) can=1;
    123                 }
    124             }
    125             if (can==1) puts("YES");
    126             else puts("NO");
    127         }
    128     }
    129     return 0;
    130 }
  • 相关阅读:
    《Programming WPF》翻译 第8章 1.动画基础
    一些被遗忘的设计模式
    《Programming WPF》翻译 第4章 数据绑定
    《Programming WPF》翻译 第3章 控件
    《Programming WPF》翻译 第5章 样式和控件模板
    《Programming WPF》翻译 第7章 绘图
    《Programming WPF》翻译 第9章 自定义控件
    《Programming WPF》翻译 第7章 绘图 (2)
    《Programming WPF》翻译 第8章 前言
    关于Debug和Release之本质区别
  • 原文地址:https://www.cnblogs.com/1013star/p/10369696.html
Copyright © 2011-2022 走看看