壁打ちAtCoder

AtCoderの問題をひたすら解いてくブログです。思考やコードの書き方の私的備忘録として

AtCoder Beginner Contest 047 by C

AtCoder Beginner Contest 047の問題についてatcoder.jp


できたもの

  • A
  • B
  • C

できなかったもの

  • D

問題A

#include <stdio.h>

int main(void){
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);

    if(a+b==c||a+c==b||b+c==a){
        printf("Yes");
    }
    else{
        printf("No");    
    }
    return 0;
}

3個のキャンディーパックを2人で分けます。
キャンディーをパックからばらせないので、個数が等しくなるようわけられる条件は1パックと残りの2パックの個数が同じ場合です。

問題B

#include <stdio.h>

int main(void){
    int w, h, n;
    int i,j;
    int x, y, a;
    int wide[100]; 
    int height[100];
    scanf("%d %d %d", &w, &h, &n);

    for(i=0;i<w;i++){
        wide[i] = 1;
    }
    for(i=0;i<h;i++){
        height[i] = 1;
    }

    for(i=0;i<n;i++){
        scanf("%d %d %d", &x, &y, &a);
        if(a==1){
            for(j=0;j<x;j++){
                wide[j] = 0;
            }
        }
        else if(a==2){
            for(j=x;j<w;j++){
                wide[j] = 0;
            }
        }
        else if(a==3){
            for(j=0;j<y;j++){
                height[j] = 0;
            }
        }
        else{
            for(j=y;j<h;j++){
                height[j] = 0;
            }
        }
    }
    
    int count_w = 0;
    int count_h = 0;
    for(i=0;i<w;i++){
        if(wide[i]==1){
            count_w++;
        }
    }
    for(i=0;i<h;i++){
        if(height[i]==1){
            count_h++;
        }
    }
    printf("%d", count_w*count_h);
    return 0;
}

要素w個の横配列wideと、要素h個の縦配列heightを使い、埋まったマスを考えました。
以下画像は入力例1について(hightは誤字でheightです)。

f:id:Rgrayjourney:20210518191441j:plain

生きてるマス(1)と塗りつぶされたマス(0)とし、中身が1の個数がへんの長さとして面積を計算しました。

1.幅と高さに合わせてそれぞれ配列を作る
2.中身をすべて1にする
3,4.aの値と範囲の条件に合わせて、マスをぬり、該当する番号の中身を0にする
5.それぞれの配列で残った1の数を数え、積をとる。


問題C

#include <stdio.h>
#include <string.h>

int main(void){
    char s[100001];
    int i;
    int count = 0;
    scanf("%s", s);
    int size = strlen(s);
    
    for(i=1;i<size;i++){
        if(s[i-1]!=s[i]){
            count++;
        }
    }

    printf("%d", count);
    return 0;
}

オセロで全て同じ色にするために何回色を変える必要があるかというもの。
挟んで逆にするので、右隣の文字と文字が違う場合を数えればいいです。

問題D

まだ
価格の差が最大となる組み合わせの数が答えですが、その方法を求められていません。