Algoogle

Algorithm for Programming Contest

PKU 3185 The Water Bowls

Category: PKU Tag: implementation

The Water Bowls

問題概要


解法


左端から見ていって1があったらそこが左側になるようにひっくり返す. そのときのひっくり返す回数.
右端から見ていって1があったらそこが右側になるようにひっくり返す. そのときのひっくり返す回数.
の最小値.

コード


(3185.cpp) download
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
#include <algorithm>
#include <cstdio>

using namespace std;

int bowl[32];
int seq1[32], seq2[32];

int main(){
    for(int i = 0; i < 20; i++){
        scanf("%d", bowl+i);
        seq1[i] = seq2[i] = bowl[i];
    }
    int ans1 = 0;
    for(int i = 0; i < 19; i++)
        if(seq1[i]){
            ans1++;
            seq1[i] = 0;
            if(i + 1 < 20) seq1[i+1] = (seq1[i+1] + 1) % 2;
            if(i + 2 < 20) seq1[i+2] = (seq1[i+2] + 1) % 2;
        }
    int ans2 = 0;
    for(int i = 19; i > 0; i--)
        if(seq2[i]){
            ans2++;
            seq2[i] = 0;
            if(i - 1 >= 0) seq2[i-1] = (seq2[i-1] + 1) % 2;
            if(i - 2 >= 0) seq2[i-2] = (seq2[i-2] + 1) % 2;
        }

    printf("%d\n", min(ans1, ans2));
    return 0;
}

Comments