暴力
#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;
}