每日一题|字符迁移【算法赛】
心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\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;
}
心有猛虎,细嗅蔷薇。再见了朋友~