站外题60分求调
  • 板块题目总版
  • 楼主GoodLuckCat
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/6 12:42
  • 上次更新2024/8/6 13:50:51
查看原帖
站外题60分求调
916579
GoodLuckCat楼主2024/8/6 12:42

题目描述

假定你是李华。你不喜欢回文,所以你想把一个只包含小写字母的字符串 SS 拆成若干个不是回文串的串。 具体地,对于一个长度为 nn 的串 SS(下标从 11 到 nn),一组划分方案可以被描述成一个序列 a1,a2,...,ama_1,a_2,...,a_m 使得 1≤a1<a2<...<am≤n+11\le a_1<a_2<...<a_m\le n+1,对于任意 1≤i<m1\le i<m,有 S[ai...ai+1−1]S[a_i...a_{i+1}-1] 不是回文串。 你需要判断是否有解,若有解输出任意一组合法的划分方案。

输入格式

本题多组数据,第一行一个正整数 TT 表示数据组数。 接下来 TT 行,每行一个字符串 SS 表示询问的字符串。

输出格式

对于每组数据。若无解输出一行一个数 −1-1;否则输出两行,第一行一个正整数 mm,然后第二行输出 mm 个数 a1,a2,...,ama_1,a_2,...,a_m。

我代码:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
bool a(const string&b)
{
	int c=0,d=b.size()-1;
	while(c<d)
	{
		if(b[c]!=b[d])return false;
		c++,d--;
	}
	return true;
}
int main()
{
	int e;
	cin>>e;
	while(e--)
	{
		string f;
		cin>>f;
		int g=f.size();
		if(!a(f))
		{
			cout<<"2\n1 "<<g+1<<'\n';
			continue;
		}
		bool h=false;
		for(int i=1;i<g;++i)
		{
			string j=f.substr(0,i);
			string k=f.substr(i,g-i);
			if(!a(j)&&!a(k))
			{
				cout<<"3\n1 "<<i+1<<' '<<g+1<<'\n';
				h=true;
				break;
			}
		}
		if(!h)cout<<"-1\n";
	}
	return 0;
}

TLE 44 个点

2024/8/6 12:42
加载中...