传送门
解:签到题,写的一言难尽,数据范围很小,分析出了一种非常复杂的思路,写完漏洞百出,还是不会暴力啊,血的教训了。
#include<bits/stdc++.h>
#define il inline
#define pb push_back
#define ms(_data,v) memset(_data,v,sizeof(_data))
#define sc(n) scanf("%d",&n)
#define SC(n,m) scanf("%d %d",&n,&m)
#define SZ(a) int((a).size())
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define drep(i,a,b) for(int i=a;i>=b;--i)
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const double pi=acos(-1.0);
const double eps=1e-9;
//il int Add(int x,int y) {return x+y>=mod?x+y-mod:x+y;}
//il int Mul(ll x,int y) {return x*y>=mod?x*y%mod:x*y;}
int T;
string s;
il bool ck(int l,int r){
int len=(r-l+1);
for (int i=l+1; i<=r; i++) {
int j=l,k=i;
for (int t=0; t<len; t++) {
if (s[j]<s[k]) break;
if (s[j]>s[k]) return false;
if ((++j)>r) j=l;
if ((++k)>r) k=l;
}
}
return true;
}
int main() {
std::ios::sync_with_stdio(0);
cin>>T;
while(T--) {
cin>>s;
int l,r,slen=SZ(s)-1;
for(int i=0;i<=slen;){
l=i,r=slen;
while(!ck(l,r)) r--;
for(int j=l;j<=r;++j) cout<<s[j];
cout<<" ";
i=r+1;
}
cout<<endl;
}
return 0;
}
本文深入探讨了一道关于字符串匹配的编程题目,作者通过复杂的思路尝试解决这一问题,但最终发现简洁的暴力算法才是关键。文章详细记录了从复杂算法到简化方案的心路历程,为读者提供了宝贵的编程经验和教训。
484

被折叠的 条评论
为什么被折叠?



