壁打ちAtCoder

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

AtCoder Beginner Contest 048 by C

AtCoder Beginner Contest 048について
C言語での回答

atcoder.jp

できたもの
A

できなかったもの
B
C
D

問題A

#include <stdio.h>

int main(void){
    char a[10], c[10], x[101];

    scanf("%s %s %s", a,x,c);

    printf("A%cC\n", x[0]);
    
    return 0;
}

問題B

#include <stdio.h>

int main(void){
    long long a,b,x,i;
    scanf("%lld %lld %lld", &a, &b, &x);
    long long num = 0;
    long long count = 0;

    if(a==0){
        count = b/x + 1;
    }
    else{
        count = b/x - (a-1)/x;
    }

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

割るという方向性は悪くなかった
あくまでf(b)-f(a-1)を計算しないといけない
(b-aを考えすぎ)

解けなかった原因

・方針がよくなかった(発想力不足)

問題C

#include <stdio.h>

int main(void){
    int n,i,j;
    long long x;
    int a[100001]={0};
    scanf("%d %lld", &n, &x);

    for(i=0;i<n;i++){
        scanf("%d", &a[i]);
    }

    long long count = 0;
    if(a[0]>x){
        count += (a[0] - x); 
        a[0] = x;
    }

    for(i=1;i<n;i++){
        if(a[i-1]+a[i]>x){
            long long tmp = a[i-1] + a[i] - x;
            count += tmp;
            a[i] -= tmp; 
        }
    }

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

もう全部long long でよくね?

解けなかった原因

・a[0] > xの場合を考えていなかった
・x,countの型をintにしていた(10^9を3回足すと超えちゃう)

問題D

まだ