- 2026 沈阳师范大学GPLT选拔赛(测试赛)
G题题解
- @ 2026-3-4 22:51:58
G题题解
根据题意顺序: 先判断连续相同,在判断递增,最后判断递减,三种都不符合则直接放入原先的字符
注意: 长度必须要大于2 if(j>i)
标准程序代码如下:
#include <bits/stdc++.h>
using namespace std;
#define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define int long long
typedef vector<vector<int>> mat;
using pii = pair<int, int>;
using pdd = pair<double,double>;
constexpr int N = 2e5 + 10;
void solve()
{
string s,ans="";
cin>>s;
int n=s.size();
for(int i=0;i<n;i++)
{
int j=i;//备份一下,方便后续统计个数
while(s[j]==s[j+1]&& j+1<n) j++;//判断相同个数
if(j>i)
{
ans+=s[i];
//加上当前数字,以及中间数字
ans+=to_string(j-i+1);
i=j;
continue;//继续下一轮
}
while(s[j]+1==s[j+1]&& j+1<n) j++;//判断递增个数
if(j>i)
{
ans+=s[i];
//加上当前数字,左括号右括号,以及中间数字
ans+='('+to_string(s[j]-s[i])+')';
i=j;
continue;//继续下一轮
}
while(s[j]-1==s[j+1]&& j+1<n) j++;//判断递减个数
if(j>i)
{
ans+=s[i];
//加上当前数字,左括号右括号,以及中间数字
ans+='('+to_string(s[j]-s[i])+')';
i=j;
continue;//继续下一轮
}
//无法满足以上三条
ans+=s[i];
}
cout<<ans<<'\n';
cout<<(ans.size()<s.size()?"YES":"NO")<<"\n";
}
signed main()
{
IOS;
int _= 1;
//cin >> _;
while(_--)
{
solve();
}
return 0;
}
0 条评论
目前还没有评论...