1 条题解
-
0
题目解法
首先枚举匹配的前缀长度,接下来枚举替换后那一段的数字和的长度。由于替换后的数字最大为 共 位,所以只需枚举到 即可。
有了这两个长度,我们就可以算出匹配的后缀长度,进而算出起始位置和终止位置。接下来检查替换段是否符合条件、后缀是否相同即可。
::::warning[注意] 可以通过检查长度进行优化,不然会 TLE 一个点 ::::
::::success[AC 代码]
#include<bits/stdc++.h> using namespace std; int s[100500]; int main(){ ios::sync_with_stdio(false); cin.tie(0); string a,b; cin>>a>>b; if(a==b) return puts("1 1"),0; s[0]=a[0]-'0'; for(int i=1;i<a.size();i++) s[i]=s[i-1]+a[i]-'0'; int maxn=0; for(int i=a.size()-1,j=b.size()-1;i>=0&&j>=0&&a[i]==b[j];i--,j--){ maxn++; } for(int i=0;i<a.size();i++){ if(i!=0&&a[i-1]!=b[i-1]) break; for(int j=1;j<=6;j++){ int k=b.size()-j-i; if(a.size()-k-1<i) continue; if(k<0) break; if(k>maxn) continue; if(a.substr(a.size()-k,k)!=b.substr(b.size()-k,k)) continue; string q=to_string(s[a.size()-k-1]-((i==0)?0:s[i-1])); if(q.size()!=j||q!=b.substr(i,j)) continue; cout<<i+1<<" "<<a.size()-k<<"\n"; return 0; } } return 0; }::::
- 1
信息
- ID
- 10351
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者