complete 31825.c
This commit is contained in:
60
zeta_C/completed/31825.c
Normal file
60
zeta_C/completed/31825.c
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
typedef struct Alphabets {
|
||||||
|
char *string;
|
||||||
|
int len;
|
||||||
|
} Alphabets;
|
||||||
|
|
||||||
|
char shift(char x) {
|
||||||
|
if (x == 90) return 65;
|
||||||
|
else
|
||||||
|
return x + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void querry_shift(Alphabets *alphas, int left, int right) {
|
||||||
|
for (int i = left - 1; i < right; i++) {
|
||||||
|
*(alphas->string + i) = shift(*(alphas->string + i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int querry_string(Alphabets *alphas, int left, int right) {
|
||||||
|
int cnt = 0;
|
||||||
|
char head = 0, now;
|
||||||
|
for (int i = left - 1; i < right; i++) {
|
||||||
|
now = *(alphas->string + i);
|
||||||
|
if (head != now) {
|
||||||
|
head = now;
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
int querry(Alphabets *alphas, int left, int right, int type) {
|
||||||
|
if (type == 2) {
|
||||||
|
querry_shift(alphas, left, right);
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return querry_string(alphas, left, right);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int N, Q, left, right, type, ret;
|
||||||
|
scanf("%d %d", &N, &Q);
|
||||||
|
Alphabets alphas;
|
||||||
|
alphas.len = N;
|
||||||
|
alphas.string = (char *) malloc(alphas.len * sizeof(char));
|
||||||
|
scanf("%s", alphas.string);
|
||||||
|
for (int i = 0; i < Q; i++) {
|
||||||
|
scanf("%d %d %d", &type, &left, &right);
|
||||||
|
ret = querry(&alphas, left, right, type);
|
||||||
|
if (ret < 0) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
printf("%d\n", ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(alphas.string);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user