• 园艺工人的求助


    【题目描述】
    终于,在一段繁忙的训练之后,到了 NOIP 的举办的时候。同学们坐上了大巴车,
    享受着沿途的风光,讨论着未解决的问题,憧憬着 NOIP 赛场上切题的样子。很快,大
    巴车到了大连大学科技楼,也就是辽宁 NOIP 的举办地点。大连大学科技楼是一幢宏
    伟的建筑,楼前摆放有一排花,共有 n 盆。花一共只有 26 种,分别用 26 个小写英文
    字母表示,也就是说,楼前的这排花可以用一个仅包含小写英文字母的字符串表示。大
    连大学雇了一个园艺工人,专门打理科技楼前的花。园艺工人看见你,热情地向你打招
    呼:“ NOIP 加油!”其实,他是有问题想请你帮忙呢!现在园艺工人想再购买一盆花
    (可以任选 26 种花中的一种),插入到原来的花中间(可以放在整排花的最左侧与最右
    侧),他想知道在插入一盆花后,能否使整排花左右对称。例如, ababa 是左右对称的,
    abcd 不是。注意:即使原来的一排花已经是左右对称的,也必须再插入一盆花。
    【输入格式】
    从文件 flower.in 中读入数据。
    本题目有多组数据,输入第一行为一个正整数 t,表示数据组数。
    接下来 t 行,每行包含一个正整数 n 和一个长度为 n 的字符串,分别表示花的数
    量与花构成的序列。
    【输出格式】
    输出到文件 flower.out 中。
    对于每组数据输出一行。若再插入一盆花之后能使整排花左右对称,输出 Yes,否
    则输出 No(注意大小写)。
    【样例 1 输入】
    4
    4 abcd
    4 aabb
    4 aaaa
    10 abcdefecba
    【样例 1 输出】
    No
    No

    Yes

    Yes
    【样例 2
    见选手目录下的 flower/flower2.in flower/flower2.ans
    【子任务】
    对于 20% 的数据, n 5
    对于另 30% 的数据, t = 1 n 1000
    对于 100% 的数据, n 106
    【题解】

    详见代码

    【代码】

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cmath>
     4 #include<cstring>
     5 using namespace std;
     6 #define ll long long 
     7 const int N = 1e6+1;
     8 int t,n;
     9 char map[N];
    10 int main()
    11 {
    12     //freopen("flower.in","r",stdin);
    13     //freopen("flower.out","w",stdout);
    14     scanf("%d",&t);
    15     for(int i = 1;i <= t;i++)
    16     {
    17         scanf("%d",&n);
    18         scanf("%s",map);
    19         int p = 0,q = n - 1,sum = 0;
    20         bool flag = true;
    21         while(p<=q)
    22         {
    23             if(map[p] == map[q])
    24             {
    25                 p++;q--;
    26             }
    27             else
    28             {
    29                 if(map[p+1] == map[q])
    30                 {
    31                     p++;
    32                     sum++;
    33                     if(sum > 1)
    34                     {
    35                         flag = false;
    36                         break;
    37                     }
    38                 }
    39                 else if(map[p] == map[q-1])
    40                 {
    41                     q--;
    42                     sum++;
    43                     if(sum > 1)
    44                     {
    45                         flag = false;
    46                         break;
    47                     }
    48                 }
    49                 else 
    50                 {
    51                     flag = false;
    52                     break;
    53                 }
    54             }
    55         }
    56         if(flag) printf("Yes
    ");
    57         else printf("No
    ");
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    vue全局启用 emulateJSON 选项
    vue全局配置数据接口的根域名
    CSS实现按钮YES-NO按钮+Jquery获取按钮状态。
    Redis命令
    在js中获取 input checkbox里选中的多个值
    Python中常见字符串去除空格的方法总结
    e.target.value和this的区别
    用脚本来运行scrapy crawl ...
    生成器的两种方式
    python中ord()函数,chr()函数,unichr()函数
  • 原文地址:https://www.cnblogs.com/peppa/p/9451011.html
Copyright © 2020-2023  润新知