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
#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    int n,c;
    scanf("%d%d", &n, &c);
    int klocki[n][2];
    int maxSize = 0;
    int maxSizeCount = 0;
    for(int i = 0; i < n; i++){
        scanf("%d%d", &klocki[i][0], &klocki[i][1]);
        if(klocki[i][0] > maxSize){
            maxSize = klocki[i][0];
            maxSizeCount = 0;
        }
        maxSizeCount++;
    }
    int maxScore = 0;
    for(int i = 0; i < maxSizeCount; i++){
        int score = klocki[n-1-i][0];
        int lastBlockType = klocki[n-1-i][1];
        for(int j = n-1- maxSizeCount; j > -1; j--){
            if(klocki[j][0] > c){
                score+=klocki[j][0];
                if(lastBlockType != klocki[j][1]){
                    score-=c;
                }
                lastBlockType = klocki[j][1];
            }
            else if(lastBlockType == klocki[j][1]){
                score+=klocki[j][0];
            }
        }
        if(score > maxScore){
            maxScore = score;
        }
    }
    printf("%d", maxScore);
    return 0;
}