# 12612 - Queries on a String
## 題解:
用暴力解的話會TLE,以下兩種方法時間複雜度都是O(n)。
方法1是用額外的陣列去記下字元,空間複雜是O(n)。
方法2是用變數記下要被取代的字元,空間複雜度是O(1)。
## Code:
### 方法1:
```c=1
#include <stdio.h>
#define N 10000 + 5
char s[N], temp[N];
int main(){
int m, l, r, k;
scanf("%s%d", s, &m);
while(m--){
scanf("%d%d%d", &l, &r, &k);
--l, --r; // 0-based
int len = r - l + 1;
k %= len;
for(int i=l; i<=r; i++){
int newPos = (i + k > r ? i + k - len : i + k);
temp[newPos] = s[i];
}
for(int i=l; i<=r; i++)
s[i] = temp[i];
}
printf("%s\n", s);
return 0;
}
```
### 方法2:
```c=1
#include <stdio.h>
#include <stdbool.h>
#define N 10000 + 5
int m, l, r, k;
char s[N];
int main(){
scanf("%s%d", s, &m);
while(m--){
scanf("%d%d%d", &l, &r, &k);
--l, --r; // 0-based
int len = r - l + 1, count = 0;
k %= len;
for(int i=l; count<len; i++){
int curPos = i;
char cur = s[i];
do{
int newPos = (curPos + k > r ? curPos + k - len : curPos + k);
char new = s[newPos];
s[newPos] = cur;
curPos = newPos;
cur = new;
count++;
}while(i != curPos);
}
}
printf("%s\n", s);
return 0;
}
```
###### tags: `NTHUOJ`