A AK的距离
2024-09-07 09:04:21
时间限制 : - 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’的下标,相减即可。
【标程】
#include<iostream>
using namespace std;
int Left, Right, L, R;
bool K_L, K_R; // 用于标记是否找到
string S;
void ini() {
ios::sync_with_stdio(false);
cin >> S;
}
void solve() {
Left = ;
Right = S.length();
while (!K_L || !K_R) {
if (S[Left] != 'A')++ Left;
else L = Left, K_L = ;
if (S[Right] != 'K')-- Right;
else R = Right, K_R = ;
if (Left > Right)break; // 特判是否无解,防止死循环
}
if (K_L && K_R)
printf("%d", R - L - );
else printf("-1");
}
int main() {
ini();
solve();
return ;
}
另:
这是@羽错光阴 童鞋的代码,也略有借鉴之处——
#include<cstdio>
using namespace std;
char A[], c = 'A';
int i = , pos, pos2;
int main(){
while(c >= 'A' && c <= 'Z'){
c = getchar();
A[i ++] = c;
}
for (pos = ; pos <= i; pos ++)if (A[pos] =='A')break;
for (pos2 = i; pos2 >= ; pos2 --)if (A[pos2] == 'K')break;
if (pos2 <= pos || pos2 == || pos == i) {
puts("-1");
return ;
}
printf("%d", pos2 - pos - );
}
其中的读入部分:
while(c >= 'A' && c <= 'Z')
因为空格不属于字母范围,成功且简便地解决了读入问题。
最新文章
- understand dojo/domReady!
- SQLSERVER全文搜索
- SOAPUI测试步骤之流量控制(Conditional Goto)
- 二级c程序设计题(2)
- 【LINUX】Linux学习小结
- dsPIC33EP ADC模块初始化及应用实例
- B - Broken Keyboard (a.k.a. Beiju Text)
- javascript笔记——js的阻塞特性[转载]
- WinForms 小型HTML服务器
- 在Yii框架中使用PHPExcel
- hdu 4454 Stealing a Cake(三分法)
- Java 获取指定日期范围内的每个月,每季度,每一年
- SourceTree安装跳过登录
- VisualStudioCode创建的asp.net core项目部署到linux,使用nginx代理
- redux源码解读(二)
- 动画库NineOldAndroids
- OpenCV代码:画出轮廓的外接矩形,和中心点
- vue.js使用typescript踩坑记
- Python中函数的参数传递与可变长参数
- 解决AttributeError: &#39;Ui_MainWindow&#39; object has no attribute &#39;show&#39;报错