壁打ちAtCoder

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

AtCoder Beginner Contest 061 by C

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

atcoder.jp



今日は散々だった

できたもの
A
B
できなかったもの
C
D

C問題できなかったの泣いちゃう

問題A

#include <stdio.h>

int main(void){
    int a,b,c;
    scanf("%d %d %d", &a, &b, &c);
    
    if(c>=a&&c<=b){
        printf("Yes");
    }
    else{
        printf("No");
    }
    
    return 0;
}

cがa以上b以下の時だけYESなので&&でif分岐

問題B

#include <stdio.h>

int main(void){
    int n,m,i;
    int a,b;
    int count[51] = {0};
    scanf("%d %d", &n,&m);

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

    for(i=1;i<n+1;i++){
        printf("%d\n", count[i]);
    }

    
    return 0;
}

同じ2つの都市を結ぶ道路が1つとは限らないということで、重複OK
したがってaとbにそれぞれ入力された数字の登場回数がその都市から他の都市への道路の数になります。

問題C

#include <stdio.h>

#define MAX 100001

int main(void){
    int n,i,a,b;
    long long k;
    scanf("%d %lld", &n, &k);
    int count[MAX] = {0};

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

    long long total = 0;

    for(i=1;i<MAX;i++){
        total += count[i];
        if(total >= k){
            printf("%d", i);
            break;
        }
    }

    return 0;
}


毎度おなじみエラーことint とlong longの範囲
配列中でlong longになる可能性に気付きませんでした

しかしなぜ一度は通ったのか?

問題D

まだ

値を一番多く取る場合には、重みの値を正負入れ替えることによって最短経路問題になるとのこと。
方針は解説に詳しく書いてありました。
(解説:https://img.atcoder.jp/abc061/editorial.pdf

C++のコードを参考に一度書いてみたんですが何故かうまくいったりいかなくなったりでまだできてません。