Advertisement
wojiaocbj

Untitled

Mar 4th, 2023
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <ctype.h>
  5. #include <string.h>
  6. #define MAX(a,b) (((a)>(b))?(a):(b))
  7. #define MIN(a,b) (((a)<(b))?(a):(b))
  8. int main(){
  9.     char input[128] = { 0 }, cur;
  10.     int i, lwr = 0, upr = 0, dig = 0, cat = 0, len;
  11.     int replace, remove, cnt;
  12.  
  13.     scanf("%s", input);
  14.     len = strlen(input);
  15.     for(i = 0;input[i];i++){
  16.         if(islower(input[i])){
  17.             lwr = 1;
  18.         }
  19.         else if(isupper(input[i])){
  20.             upr = 1;
  21.         }
  22.         else if(isdigit(input[i])){
  23.             dig = 1;
  24.         }
  25.     }
  26.     cat = lwr + upr + dig;
  27.     if(len < 6){
  28.         printf("%d\n", MAX(6 - len, 3 - cat));
  29.     }
  30.     else if(len <= 20){
  31.         replace = 0;cnt = 0;
  32.         cur = '#';
  33.         for(i = 0;input[i];i++){
  34.             if(input[i] == cur){
  35.                 cnt += 1;
  36.             }
  37.             else{
  38.                 replace += cnt / 3;
  39.                 cnt = 1;
  40.                 cur = input[i];
  41.             }
  42.         }
  43.         replace += cnt / 3;
  44.         printf("%d\n", MAX(replace, 3 - cat));
  45.     }
  46.     else{
  47.         int rm2 = 0;
  48.         cnt = 0;remove = len - 20;replace = 0;
  49.         cur = '#';
  50.         for(i = 0;input[i];i++){
  51.             if(input[i] == cur){
  52.                 cnt += 1;
  53.             }
  54.             else{
  55.                 if(remove > 0 && cnt >= 3){
  56.                     if(cnt % 3 == 0){
  57.                         remove -= 1;replace -= 1;
  58.                     }
  59.                     else if(cnt % 3 == 1){
  60.                         rm2 += 1;
  61.                     }
  62.                 }
  63.                 replace += cnt / 3;
  64.                 cnt = 1;cur = input[i];
  65.             }
  66.         }
  67.         if(remove > 0 && cnt >= 3){
  68.             if(cnt % 3 == 0){
  69.                 remove -= 1;replace -= 1;
  70.             }
  71.             else if(cnt % 3 == 1){
  72.                 rm2 += 1;
  73.             }
  74.         }
  75.         replace += cnt / 3;
  76.         int use2 = MIN(replace, MIN(rm2, remove / 2));
  77.         replace -= use2;remove -= use2 * 2;
  78.         int use3 = MIN(replace, remove / 3);
  79.         replace -= use3;
  80.         remove -= use3 * 3;
  81.         printf("%d\n", (len - 20) + MAX(replace, 3 - cat));
  82.     }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement