Advertisement
warrior98

charlie

Mar 9th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstring>
  3. #define MAX 100003
  4. #define max(a,b) (a>b?a:b)
  5.  
  6. char s[MAX], stiva[MAX];
  7. int v[MAX];
  8.  
  9. int main() {
  10.     int p, lg, i, semn, maxLg, vf, sum;
  11.  
  12.     FILE *fin = fopen("charlie.in", "r");
  13.     fscanf(fin, "%d\n", &p);
  14.     fgets(s, MAX, fin);
  15.     lg = strlen(s)-1;
  16.     fclose(fin);
  17.  
  18.     FILE *fout = fopen("charlie.out", "w");
  19.  
  20.     if (p == 1) {
  21.         semn = -1;
  22.         v[0] = 1;
  23.         maxLg = 1;
  24.  
  25.         for (i = 1; i < lg; i++) {
  26.             if (semn == -1 && s[i] < s[i - 1] && s[i] < s[i + 1]) {
  27.                 semn = 1;
  28.                 v[i] = v[i - 1] + 1;
  29.             }
  30.             else if (semn == 1 && s[i] > s[i - 1]) {
  31.                 semn = -1;
  32.                 v[i] = v[i - 1] + 1;
  33.             }
  34.             else {
  35.                 v[i] = 1;
  36.                 semn = -1;
  37.             }
  38.  
  39.             if (v[i] > maxLg)
  40.                 maxLg = v[i];
  41.         }
  42.  
  43.         fprintf(fout, "%d\n", maxLg);
  44.     }
  45.     else {
  46.         stiva[0] = s[0];
  47.         stiva[1] = s[1];
  48.         vf = 1;
  49.         sum = 0;
  50.  
  51.         for (i = 2; i < lg; i++) {
  52.             if (stiva[vf] < stiva[vf - 1] && stiva[vf] < s[i]) {
  53.                 sum += max(stiva[vf - 1], s[i]) - 'a' + 1;
  54.                 stiva[vf] = s[i];
  55.  
  56.                 while (stiva[vf - 1] < stiva[vf - 2] && stiva[vf - 1] < stiva[vf]) {
  57.                     sum += max(stiva[vf - 2], stiva[vf]) - 'a' + 1;
  58.                     stiva[vf - 1] = stiva[vf--];
  59.                 }
  60.             }
  61.             else {
  62.                 stiva[++vf] = s[i];
  63.             }
  64.         }
  65.  
  66.         for (i = 0; i <= vf; i++)
  67.             fputc(stiva[i], fout);
  68.  
  69.         fprintf(fout, "\n%d\n", sum);
  70.     }
  71.  
  72.     fclose(fout);
  73.  
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement