zoukankan      html  css  js  c++  java
  • 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--D-psd面试

    链接:https://www.nowcoder.com/acm/contest/90/D
    来源:牛客网

    • 1.题目描述
      掌握未来命运的女神 psd 师兄在拿了朝田诗乃的 buff 后决定去实习。
      埃森哲公司注册成立于爱尔兰,是一家全球领先的专业服务公司,为客户提供战略、咨询、数字、技术和运营服务及解决方案。他们立足商业与技术的前沿,业务涵盖40多个行业,以及企业日常运营部门的各个职能。凭借独特的业内经验与专业技能,以及翘楚全球的交付网络,他们帮助客户提升绩效,并为利益相关方持续创造价值。埃森哲是《财富》全球500强企业之一,目前拥有约41.1万名员工,服务于120多个国家的客户。于是psd打算去埃森哲公司投一下简历。
      于是他用英文写了一篇简历,由于手速太快了以致自己都不知道写了什么。
      然而面试官 xwc 一眼就看到了重点:大学打过 ACM!
      xwc:“
      听说你很低袄?考你个题:
      忽略字母大小写,你这篇简历去掉最长的回文子序列后还有多长?

      psd 顺手就把这个问题抛给了你。
      输入描述:
      多组输入,每组输入一个长度不超过 1234 的没空格的字符串,是 psd 的简历。
      输出描述:
      每组输出一个整数,如题。
      示例1
      输入
      google
      输出
      2
      示例2
      输入
      aBc,bAd
      输出
      2
    • 2.题目分析
      题目我已经无力吐槽了,这个广告打的真是毫无痕迹Orz,有用的就一句话。
      好吧,这个让我们求的就是一个字符串忽略字母大小写,去掉最长的回文子序列后的长度。
      首先把字符串统一成大写或者小写,然后把原字符串反转后存下来,接下来就是求这两个字符串的最长公共子序列(LCS)了,求完之后拿长度减去LCS的长度就是答案了。
    • 3.代码如下
    #include<cstdio> 
    #include<cstring> 
    #include<algorithm> 
    #include<iostream> 
    #include<string> 
    #include<vector> 
    #include<stack> 
    #include<bitset> 
    #include<cstdlib> 
    #include<cmath> 
    #include<set> 
    #include<list> 
    #include<deque> 
    #include<map> 
    #include<queue>
    #include<algorithm> 
    using namespace std; 
    typedef long long ll; 
    const double PI = acos(-1.0); 
    const double eps = 1e-6; 
    const int INF = 1000000000; 
    const int maxn = 100; 
    char str1[2000],s2[2000];
    int dp[2000][2000];
    int main()
    {  
        while(cin>>str1)
        {
            int l=strlen(str1),to=0;
            for(int i=0;str1[i];i++)
            {
                if(str1[i]>='a'&&str1[i]<='z')
                str1[i]=str1[i]-'a'+'A';
            }
            for(int i=l-1;i>=0;i--)
            {
                s2[to++]=str1[i];
            }
            s2[to]='';
             memset(dp, 0, sizeof(dp)); 
            for( int i = 0; i < l; i++)
                for(int  j = 0; j < to; j++)
                    if(str1[i] == s2[j])
                        dp[i + 1][j + 1] = dp[i][j] + 1;
                    else
                        dp[i + 1][j + 1] = max(dp[i + 1][j], dp[i][j + 1]);
            cout<<l-dp[l][to]<<endl;
    
        }
    
        return 0;
    }
  • 相关阅读:
    AndroidStudio小技巧--依赖库
    仿iOS Segmented Control样式"
    Metaweblog在Android上使用
    正则表达式使用技巧
    flask中gunicorn的使用
    Git用法小记
    指定GPU训练模型
    python中grpc的使用示例
    如何用LaTex编辑数学公式
    keras使用多进程
  • 原文地址:https://www.cnblogs.com/FlyerBird/p/8995976.html
Copyright © 2011-2022 走看看