专栏文章

题解:P14018 [ICPC 2024 Nanjing R] 左移 3

P14018题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miny2aph
此快照首次捕获于
2025/12/02 10:13
3 个月前
此快照最后确认于
2025/12/02 10:13
3 个月前
查看原文

P14018 题解:

主要思路:

先循环遍历一边字符串,如果从当前下标向后截取 77 位的子串为 nanjing,就让答案加一。接下来处理边上的串,直接打表就行了,不难。

代码实现:

  • 定义变量 sumsum 存储最终答案。
  • 循环扫一遍字符串,遍历到 nanjing 就让 sum+1sum+1
  • 打表处理边上的串。
  • 输出答案。
AC Code:
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;
int T;
int n,k;
int32_t main(){
	cin.tie(nullptr)->ios::sync_with_stdio(false);
	cin>>T;
	while(T--){
		cin>>n>>k;
		string s;
		cin>>s;
		if(s.size()<7){
			cout<<0<<endl;
			continue;
		} 
		int sum=0;
		for(int i=0;i<s.size()-6;i++){
			if(s.substr(i,7)=="nanjing"){
				sum++;
			}
		}//循环扫一遍字符串
 		//打表处理边上的串(注意判断左移次数是否够) 
		if(s[0]=='g'&&s.substr(s.size()-6,6)=="nanjin"&&k>=1){
			sum++;
		}
		if(s.substr(0,2)=="ng"&&s.substr(s.size()-5,5)=="nanji"&&k>=2){
			sum++;
		}
		if(s.substr(0,3)=="ing"&&s.substr(s.size()-4,4)=="nanj"&&k>=3){
			sum++;
		}
		if(s.substr(0,4)=="jing"&&s.substr(s.size()-3,3)=="nan"&&k>=4){
			sum++;
		}
		if(s.substr(0,5)=="njing"&&s.substr(s.size()-2,2)=="na"&&k>=5){
			sum++;
		}	
		if(s.substr(0,6)=="anjing"&&s[s.size()-1]=='n'&&k>=6){
			sum++;
		}
		cout<<sum<<endl;//输出答案								
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...