2019年1月22日 星期二

APCS c462: 交錯字串 (Alternating Strings)

原題請見 APCS大學程式設計先修檢測 (2017/10/18 實作第二題)
以下為通過高中生程式解題系統 AC (Accepted) 的 C 語言程式參考解答

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
#include <stdio.h>
#include <stdlib.h>

#define MAX 100002
int main()
{
    char s[MAX];
    char bors[MAX]={0};
    int conti[MAX];
    int k,i;
    int big=0;
    scanf(" %d\n",&k);
    fgets(s, MAX , stdin);
    int end=0;
    while(s[end]!='\0')
    {
        if(s[end]=='\n')
        {
            s[end]='\0';
        }else{
        end++;}
    }
    int now=0;
    int time=0;
    for(int i=0 ; i<end; i++){
        if(s[i]>='A' && s[i]<='Z'){
            bors[i]='u';
        }
        if(s[i]>='a' && s[i]<='z')
        {
            bors[i]='d';
        }

    }
    int j=0;
    i=0;




    for(int p=0 ; p<end ; p++){
    if(bors[i]=='d'){
        do{
            time++;
            i++;
            p++;
        }while(bors[i]=='d');
        conti[j]=time;
        time=0;
        j++;
    }
    if(bors[i]=='u'){
         do{
            time++;
            i++;
            p++;
        }while(bors[i]=='u');
        conti[j]=time;
        time=0;
        j++;
    }
    }




      int time_2 = 0;
      if(conti[0]>=k)
      {
          time_2++;
          if(conti[1]>=k)//post
        {
            time_2++;

        }
         big = time_2 ;
      }





    for(i=1; i<j ; i++){
        if( time_2 ==0 && conti[i]==k)
        {
            time_2++; //self
            if(i>0 && conti[i-1]>=k) //pre
            {
            time_2++;
            }
        }
        if(time_2!=0 && conti[i]==k && conti[i+1]>=k && i+1<j)//post
        {

            time_2++;

        }
        if (time_2>big){
            big = time_2 ;
        }
        if (conti[i]!=k)
        {
            time_2 = 0;
        }

    }

    printf("%d",big*k);
    return 0;
}

沒有留言:

張貼留言