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