zoukankan      html  css  js  c++  java
  • 园艺工人的求助

    【题目描述】
    终于,在一段繁忙的训练之后,到了 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 }
  • 相关阅读:
    arm-linux-gcc 安装和测试
    JIT动态编译器的原理与实现之Interpreter3
    sql server常有的问题-实时错误'91' 对象变量或with块变量未设置
    WM_PARENTNOTIFY的作用(不完全)
    WM_CLOSE、WM_DESTROY、WM_QUIT学习总结(点击关闭按钮会触发WM_CLOSE消息,DestroyWindow API会触发WM_DESTROY和WM_NCDESTROY消息,MSDN上写的很清楚)
    Windows XP 每次开机都自动检测硬盘 解决办法(可以用HDDRegenerate修复坏道)
    这141家创业公司为什么失败
    QTableView 固定列宽度(鼠标拖动后,仍可固定)
    银行快捷支付的思考
    QQ空间如何显示相片
  • 原文地址:https://www.cnblogs.com/peppa/p/9451011.html
Copyright © 2011-2022 走看看