• A AK的距离


    时间限制 : - MS   空间限制 : - KB 
    评测说明 : 1s,128m
    问题描述

    同学们总想AK。
    于是何老板给出一个由大写字母构成的字符串,他想你帮忙找出其中距离最远的一对'A'和'K'。
    比如下列字符串:
    BKABGKWAXKA
    距离最远一对'A'和'K'的间距为6,它们之间间隔了6个字符。

    输入格式

    一行,一个由大写字母构成的字符串

    输出格式

    一个整数,表示A和K最远的间距。要求A必须在K的左侧,如果不存在,输出-1

    样例输入 1

    BKABGKWAXKA

    样例输出 1

    6

    样例输入 2

    KKKKKKKKKKAAAAAAAAAAAAAAA

    样例输出 2

    -1

    提示

    1<=字符串的长度<=10000

    【分析】

      第一道,肯定是签到题。按照题目德意思从字符串最前面找到第一个‘A’的下标,和最后面找到第一个‘K’的下标,相减即可。

    【标程】

     1 #include<iostream>
     2 using namespace std;
     3 int Left, Right, L, R;
     4 bool K_L, K_R;    // 用于标记是否找到
     5 string S;
     6 void ini() {
     7     ios::sync_with_stdio(false);
     8     cin >> S;
     9 }
    10 void solve() {
    11     Left = 0;
    12     Right = S.length();
    13     while (!K_L || !K_R) {
    14         if (S[Left] != 'A')++ Left;
    15         else L = Left, K_L = 1;
    16         if (S[Right] != 'K')-- Right;
    17         else R = Right, K_R = 1;
    18         if (Left > Right)break;   // 特判是否无解,防止死循环
    19     }
    20     if (K_L && K_R)
    21         printf("%d", R - L - 1);
    22     else printf("-1");
    23 }
    24 int main() {
    25     ini();
    26     solve();
    27     return 0;
    28 }

     另:

      这是@羽错光阴 童鞋的代码,也略有借鉴之处——

     1 #include<cstdio>
     2 using namespace std;
     3 char A[10005], c = 'A';
     4 int i = 1, pos, pos2;
     5 int main(){
     6     while(c >= 'A' && c <= 'Z'){
     7         c = getchar();
     8         A[i ++] = c;
     9     }
    10     for (pos = 1; pos <= i; pos ++)if (A[pos] =='A')break;
    11     for (pos2 = i; pos2 >= 1; pos2 --)if (A[pos2] == 'K')break;
    12     if (pos2 <= pos || pos2 == 0 || pos == i) {
    13         puts("-1");
    14         return 0;
    15     }
    16     printf("%d", pos2 - pos - 1);
    17 }

      其中的读入部分:

    while(c >= 'A' && c <= 'Z')

      因为空格不属于字母范围,成功且简便地解决了读入问题。

  • 相关阅读:
    IntelliJ IDEA错误: 源值1.5已过时,将在未来所有版本中删除
    AcWing 311. 月之谜 数位dp
    AcWing 306. 杰拉尔德和巨型象棋 计数类DP
    AcWing 296. 清理班次2 线段树优化dp
    luogu P3052 [USACO12MAR]Cows in a Skyscraper G
    luogu P5664 Emiya 家今天的饭 容斥+dp
    AcWing 289. 环路运输 滑动窗口单调队列优化
    AcWing 288. 休息时间 滚动数组+分类讨论
    AcWing 287. 积蓄程度 树形dp,换根
    luogu P3842 [TJOI2007]线段 线性dp
  • 原文地址:https://www.cnblogs.com/Limbo-To-Heaven/p/11335727.html
Copyright © 2020-2023  润新知