|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <bits/stdc++.h>
- using namespace std;
- int l,r,k;
- void solve(string &s)
- {
- cin>>l>>r>>k;
- l--,r--;
- string ans1,ans2,ans3,ans;
- int len=s.size();
-
- ans2=s.substr(l,r-l+1);
- // cout<<ans1<<" "<<ans2<<" "<<ans3<<endl;
- int size=ans2.size();
- for(int i=0;i<k;i++)
- {
- ans1=s.substr(0,l);
- ans3=s.substr(r+1,len-r-1);
- ans2=ans2[size-1]+ans2.substr(0,r-l);
-
- }
- ans=ans1+ans2+ans3;
- solve(ans);
- cout<<ans<<endl;
-
- }
- int main()
- {
- string s;
- cin>>s;
- int n;
- cin>>n;
- while(n--)
- {
- solve(s);
- }
- }
复制代码
本帖最后由 柿子饼同学 于 2023-11-23 21:46 编辑
不用递归啊 , 顺次修改就好
下面是我的代码
如果你想用递归的话 , 可以在最后加一个判断 , 如果 n == 0 就打印答案 , 然后返回
- #include <bits/stdc++.h>
- using namespace std;
- string s;
- int n;
- void Modify(int l, int r, int k){
- l--, r--;
- k %= (r - l + 1); // 这里是为了 k 不会超出 s 的范围, 取模不会影响答案, 多转整个一圈不会改变答案
- string temp = s.substr(r - k + 1, k); // 要从前面出来的那个部分, 是 s[r - k + 1, r]
- for(int i = r - k; i >= l; i--) s[i + k] = s[i]; // 前面的倒着偏移 k
- for(int i = 0; i < k; i++) s[l + i] = temp[i]; // 后面的补回来
- }
- int main(){
- ios::sync_with_stdio(0);
- cin.tie(0);
-
- cin >> s >> n;
- while(n--){
- int l, r, k;
- cin >> l >> r >> k;
- Modify(l, r, k); // 顺次修改就好
- }
-
- cout << s;
-
- return 0;
- }
复制代码
|
-
|