暴力
#include <bits/stdc++.h>
using namespace std;
char arr[(int)1e5*2+5]; //要强制转换为int
int main()
{//cout << (char)('a'+7);long long len=0,op=0;cin >> len >> op;cin >> arr; //cout << op;//cout << arr;int inx[(int)1e5*2+5]={0};for(int i=0;i<op;i++){//cout <<1;long long left=0,right=0,k=0;cin >>left >> right >>k;k=k%26;for(long long j=left-1;j<=right-1;j++){inx[j] +=k;inx[j] = inx[j]%26; //cout <<1;}}for(int j=0;j<len;j++){long long k = inx[j];if('z'-arr[j] >= k){arr[j] = (char)(arr[j]+k);}else{arr[j] = (char)( 'a'+k-('z'-arr[j])-1 );//边界情况一定要检查清楚,考试的用例可能不考虑边界情况 }}cout << arr;return 0;
}
差分数组加前缀和
#include <bits/stdc++.h>
using namespace std;
char arr[(int)1e5*2+5]; //要强制转换为int
int main()
{//cout << (char)('a'+7);long long len=0,op=0;cin >> len >> op;cin >> arr; //cout << op;//cout << arr;int inx[(int)1e5*2+5]={0};for(int i=0;i<op;i++){//cout <<1;long long left=0,right=0,k=0;cin >>left >> right >>k;k=k%26;inx[left-1] +=k;inx[right]-=k;}for(int i=0;i<len;i++){inx[i] +=inx[i-1]; }for(int j=0;j<len;j++){long long k = inx[j]%26;//记得处理if('z'-arr[j] >= k){arr[j] = (char)(arr[j]+k);}else{arr[j] = (char)( 'a'+k-('z'-arr[j])-1 );//边界情况一定要检查清楚,考试的用例可能不考虑边界情况 }}cout << arr;return 0;
}