31日目: Beginner 47

31日目(2019/9/20)

AtCoder Beginner Contest 047

解けた問題

A:キャンディーと2人の子供 / Fighting over Candies

a == b+c || b == a+c || c == a+bで判定しました。もっと上手な判定方法あるかな?

B:すぬけ君の塗り絵 2 イージー / Snuke's Coloring 2 (ABC Edit)

W,Hの最大が100だったので、最大100x100の盤を作成して、条件が出るたびに更新する手法にしました。あんまりスマートではないと思うけど、多分ACできるかなって思いながらコーディングしました。

// C++のテンプレート
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

int main(void){
    int W,H,N;
    cin >> W >> H >> N;
    vector<vector<bool>> board(H,vector<bool>(W));
    int x,y,a;
    for(int iter=0;iter<N;iter++){
        cin >> x >> y >> a;
        switch(a){
            case 1:
                for(int i=0;i<H;i++){
                    for(int j=0;j<x;j++){
                        board[i][j] = true;
                    }
                }
                break;
            case 2:
                for(int i=0;i<H;i++){
                    for(int j=x;j<W;j++){
                        board[i][j] = true;
                    }
                }
                break;
            case 3:
                for(int i=0;i<y;i++){
                    for(int j=0;j<W;j++)
                        board[i][j] = true;
                }
                break;
            case 4:
                for(int i=y;i<H;i++){
                    for(int j=0;j<W;j++){
                        board[i][j] = true;
                    }
                }
        }
    }
    int count = 0;
    for(int i=0;i<H;i++){
        for(int j=0;j<W;j++)
            if(!board[i][j])
                count++;
    }
    cout << count << endl;
}

タスクがたくさんあってちょっとまずいので、今日も2問だけでお茶濁す感じで…(しっかり取り組まないと)