每日一题|字符迁移【算法赛】
字符迁移
心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。
字符迁移
注意:
预习知识:前缀和+差分
实践代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define INF 0x3f3f3f3f
#define PII pair<int,int>
const int N = 1e6+10;
const int mod = 1e9+7;
int a[N],b[N];
char c[N];
void solve(){int n,q;cin>>n>>q;string s;cin>>s;for(int i=1;i<=n;i++){a[i]=s[i-1]-'a';b[i]=a[i]-a[i-1];//差分数组}while(q--){int l,r,k;cin>>l>>r>>k;/*差分的关键一步*/b[l]+=k;b[r+1]-=k;}for(int i=1;i<=n;i++) a[i]=a[i-1]+b[i];//前缀和for(int i=1;i<=n;i++) {c[i]=(a[i])%26+'a';cout<<c[i];}//右移且在26个小写字母中循环
}
signed main(){ios::sync_with_stdio(false);cin.tie(0);cout<<fixed<<setprecision(2);//保留两位小数int t=1;//cin>>t;while(t--){solve();}return 0;
}
心有猛虎,细嗅蔷薇。再见了朋友~