zoukankan      html  css  js  c++  java
  • Forethought Future Cup

    传送门


    A. Love "A"

      题意:

        如果长度为 len 的串 s 中, 'a' 的个数严格大于 2/len,那么,就成此串为 "good string";

        给出你一个串 s,你可以删去任意字符(当然也可以不删)使得 s 变为 "good string",求 "good string" 的最大长度;

      思路:

        假设 s 中有 sum 个'a',那么,答案就是 min{ sum*2-1,len };

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=100;
     4 
     5 char s[maxn];
     6 
     7 int main()
     8 {
     9     while(~scanf("%s",s))
    10     {
    11         int sum=0;
    12         int len=strlen(s);
    13         for(int i=0;i < len;++i)
    14             if(s[i] == 'a')
    15                 sum++;
    16         printf("%d
    ",min(len,sum*2-1));
    17     }
    18 }
    View Code

    B. Hate "A"

      题意:

        新定义:将串 s 中的所有字符 'a' 去掉构成串 s',s+s' = t;

        给出你串 t,判断是否有相应的串 s,使得 s+s' = t,如果有,输出串 s,反之,输出":(";

      思路:

        将给出的串 t 中的所有 'a' 去掉,形成新的串 ans;

        1.如果串 ans 的长度为0,输出串 t;

        2.如果串 ans 的长度为奇数,输出 ":(";

        3.如果串 ans 的长度为偶数,那么便可将串 ans 分成左右两部分 串ansL,串ansR,比对 ansL 是否等于 ansR;

          3.1 'a'最后出现的位置在ansR中,输出 ":(";

          3.2 如果相等,并且'a'最后出现的位置不在ansR中,输出 t 串中包含 ansL 的部分;

          3.3如果不相等,输出":(";

        例如:

        1. t="aaaa",输出 "aaaa";

        2. t="ab",输出 ":(";

        3.1 t="ababa",输出 ":(";

        3.2 t="abab",输出 "aba";

        3.3 t="abac",输出 ":(";

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e5+50;
     4 
     5 char t[maxn];
     6 char s[maxn];
     7 
     8 char *Solve()
     9 {
    10     int sum=0;
    11     int sumA=0;
    12     int len=strlen(t);
    13     for(int i=0;i < len;++i)
    14         if(t[i] == 'a')
    15             sumA++;
    16         else
    17             sum++;
    18     if(sum == 0)//情况1
    19         return t;
    20         
    21     int sumR=0;
    22     for(int i=len-1;i >= 0 && t[i] != 'a';i--,sumR++);
    23     if(sum%2 != 0 || sumR < sum/2)//情况2,3.1
    24         return ":(";
    25         
    26     int sumL=0;
    27     int index=0;
    28     for(int i=0;sumL < sum/2;++i)
    29     {
    30         s[index++]=t[i];
    31         if(t[i] == 'a')
    32             continue;
    33 
    34         if(t[i] != t[sumA+sumL+sum/2])//情况3.3
    35             return ":(";
    36         sumL++;
    37 
    38         if(sumL == sum/2)//情况3.2
    39         {
    40             while(t[i+1] == 'a')
    41                 s[index++]=t[++i];
    42         }
    43     }
    44     s[index]='';
    45     return s;
    46 }
    47 int main()
    48 {
    49     scanf("%s",t);
    50     printf("%s
    ",Solve());
    51 
    52     return 0;
    53 }
    View Code

    简洁版代码(参考自大神代码,Orz)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 string s;
     5 string t;
     6 
     7 string Solve()
     8 {
     9     for(int i=0;i < s.size();++i)
    10         if(s[i] != 'a')
    11             t += s[i];
    12     if(t.size()%2 != 0)
    13         return ":(";
    14 
    15     int half=t.size()/2;
    16 
    17     string t1=t.substr(0,half);//前半段
    18     string t2=t.substr(half,half);//后半段
    19     if(t1 == t2 && t1 == s.substr(s.size()-half,half))
    20         return s.substr(0,s.size()-half);
    21     return ":(";
    22 }
    23 int main()
    24 {
    25     ios::sync_with_stdio(false);
    26     cin.tie(false);
    27     cout.tie(false);
    28 
    29     cin>>s;
    30     cout<<Solve()<<endl;
    31 
    32     return 0;
    33 }
    View Code

    用到了string中的一些函数,这些函数我没怎么接触过,之前一直不怎么用string,总感觉char[]比string块,QWQ;

  • 相关阅读:
    python_控制台输出带颜色的文字方法
    Django 知识总结(一)
    C# 实现俄罗斯方块
    一起学SpringMVC之Request方式
    一起学SpringMVC之RequestMapping详解
    一起学SpringMVC之Json
    一起学SpringMVC之注解
    一起学SpringMVC之入门篇
    一起学Android之Xml与Json解析
    一起学Android之AsyncTask
  • 原文地址:https://www.cnblogs.com/violet-acmer/p/10748322.html
Copyright © 2011-2022 走看看