Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstring>
- #define MAX 100003
- #define max(a,b) (a>b?a:b)
- char s[MAX], stiva[MAX];
- int v[MAX];
- int main() {
- int p, lg, i, semn, maxLg, vf, sum;
- FILE *fin = fopen("charlie.in", "r");
- fscanf(fin, "%d\n", &p);
- fgets(s, MAX, fin);
- lg = strlen(s)-1;
- fclose(fin);
- FILE *fout = fopen("charlie.out", "w");
- if (p == 1) {
- semn = -1;
- v[0] = 1;
- maxLg = 1;
- for (i = 1; i < lg; i++) {
- if (semn == -1 && s[i] < s[i - 1] && s[i] < s[i + 1]) {
- semn = 1;
- v[i] = v[i - 1] + 1;
- }
- else if (semn == 1 && s[i] > s[i - 1]) {
- semn = -1;
- v[i] = v[i - 1] + 1;
- }
- else {
- v[i] = 1;
- semn = -1;
- }
- if (v[i] > maxLg)
- maxLg = v[i];
- }
- fprintf(fout, "%d\n", maxLg);
- }
- else {
- stiva[0] = s[0];
- stiva[1] = s[1];
- vf = 1;
- sum = 0;
- for (i = 2; i < lg; i++) {
- if (stiva[vf] < stiva[vf - 1] && stiva[vf] < s[i]) {
- sum += max(stiva[vf - 1], s[i]) - 'a' + 1;
- stiva[vf] = s[i];
- while (stiva[vf - 1] < stiva[vf - 2] && stiva[vf - 1] < stiva[vf]) {
- sum += max(stiva[vf - 2], stiva[vf]) - 'a' + 1;
- stiva[vf - 1] = stiva[vf--];
- }
- }
- else {
- stiva[++vf] = s[i];
- }
- }
- for (i = 0; i <= vf; i++)
- fputc(stiva[i], fout);
- fprintf(fout, "\n%d\n", sum);
- }
- fclose(fout);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement