打卡信奥刷题(850)用C++信奥P10841[普及组/提高] 【MX-J2-T2】Turtle and Strings

P10841 【MX-J2-T2】Turtle and Strings

题目背景

原题链接:https://oier.team/problems/J2C

题目描述

给你一个仅由小写字母组成的字符串 s s s

一个字符串序列 t 1 , t 2 , … , t k t_1, t_2, \ldots, t_k t1,t2,,tk 是合法的当且仅当:

  • s = t 1 + t 2 + ⋯ + t k s = t_1 + t_2 + \cdots + t_k s=t1+t2++tk,此处 + + + 为字符串拼接;
  • ∀ 1 ≤ i ≤ k − 1 , t i ≠ t i + 1 \forall 1 \le i \le k - 1, t_i \ne t_{i + 1} ∀1ik1,ti=ti+1

求合法的字符串序列的长度的最大值。

输入格式

本题有多组测试数据。

第一行输入一个正整数 T T T,表示测试数据组数。

对于每组测试数据:

第一行包含一个正整数 n n n,表示字符串的长度。

第二行包含一个长度为 n n n 的仅由小写字母组成的字符串 s s s

输出格式

对于每组数据,输出一行一个整数,表示合法的字符串序列的长度的最大值。

输入输出样例 #1

输入 #1

4
3
abc
5
aabbb
6
aaaaaa
10
pppqqppppq

输出 #1

3
3
4
7

说明/提示

【样例解释】

在第一组数据中,一个合法且长度最大的字符串序列为 [ a , b , c ] [\texttt{a}, \texttt{b}, \texttt{c}] [a,b,c]

在第二组数据中,一个合法且长度最大的字符串序列为 [ a , abb , b ] [\texttt{a}, \texttt{abb}, \texttt{b}] [a,abb,b]

在第三组数据中,一个合法且长度最大的字符串序列为 [ a , aa , a , aa ] [\texttt{a}, \texttt{aa}, \texttt{a}, \texttt{aa}] [a,aa,a,aa]

【数据范围】

本题采用捆绑测试且开启子任务依赖。

子任务编号分值 n ≤ n \le n ∑ n ≤ \sum n \le n特殊性质子任务依赖
1 1 1 18 18 18 9 9 9 1 0 4 10^4 104
2 2 2 21 21 21 50 50 50 1 0 3 10^3 103 1 1 1
3 3 3 12 12 12 1 0 6 10^6 106 1 0 6 10^6 106 s 1 = s 2 = ⋯ = s n s_1 = s_2 = \cdots = s_n s1=s2==sn
4 4 4 23 23 23 1 0 6 10^6 106 1 0 6 10^6 106恰好存在一个位置 1 ≤ i ≤ n − 1 1 \le i \le n - 1 1in1 使得 s i ≠ s i + 1 s_i \ne s_{i + 1} si=si+1
5 5 5 26 26 26 1 0 6 10^6 106 1 0 6 10^6 106 1 , 2 , 3 , 4 1, 2, 3, 4 1,2,3,4

对于所有数据,满足 1 ≤ T ≤ 1 0 5 1 \le T \le 10^5 1T105 1 ≤ n , ∑ n ≤ 1 0 6 1 \le n, \sum n \le 10^6 1n,n106 s s s 仅由小写字母组成。

C++实现

#include<bits/stdc++.h>
using namespace std;
int t;
int n;
string s;
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>n;
cin>>s;
int cnt=n;
string last=“”;
for(int j=0;j<s.size();j++){
if(last.size()==1&&s[j]==last[0])
cnt–,j++,last=s[j-1]+s[j];
else
last=s[j];
}
cout<<cnt<<‘\n’;
}
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值