ないものは作りましょう。

色々なことに挑戦(主にプログラミング)

CodeFoces Round294 Div2

結果:2完
レーティング:1257→1198(-59)

灰コーダーに落ちてしまいました(泣)
今回はA,B問題をACして2完でした(時間がかかりすぎたのが悪かったな)

Problem A "A and B and Chess"

チェスの駒ごとに重さ(価値?)が決まっていて、白・黒の各プレイヤー毎の合計の重さが重い方を出力する問題。

ボードが8x8なので左上から右下にループを回して、大文字なら白の重さに追加して、小文字なら黒の重さに追加していき、最終的に重い方のプレイヤーを出力・または引き分けを出力して終わり。

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<int,int> pint;
#define rep(i,n) for(int i=0;i<(int)(n);i++)
const int INF = 100000000;
const int dx[4]={0,1,0,-1}, dy[4]={-1,0,1,0};
struct P{int x;int y;P(int X=0,int Y=0){x=X;y=Y;}};

int main() {
    char bd[9][9];
    rep(i,8) cin >> bd[i];
    int white = 0;
    int black = 0;
    rep(i,8) rep(j,8) {
        int p = 0;
        if(bd[i][j] == 'Q' || bd[i][j] == 'q') p = 9;
        if(bd[i][j] == 'R' || bd[i][j] == 'r') p = 5;
        if(bd[i][j] == 'B' || bd[i][j] == 'b') p = 3;
        if(bd[i][j] == 'N' || bd[i][j] == 'n') p = 3;
        if(bd[i][j] == 'P' || bd[i][j] == 'p') p = 1;
        if(bd[i][j] >= 'a' && bd[i][j] <= 'z') black += p;
        if(bd[i][j] >= 'A' && bd[i][j] <= 'Z') white += p;
    }

    if(white > black) printf("White\n");
    if(white < black) printf("Black\n");
    if(white == black) printf("Draw\n");
    return 0;
}

Problem B " A and B and Compilation Errors"

はじめにすべてのコンパイルエラーが渡され、Bさんが1回目の修正を行った後のエラー、Bさんが2回目の修正を行った後のエラーの3つの数字の列が与えられるとき、
Bさんが1回目の修正で直したエラーの番号と、2回目の修正で直したエラーの番号を出力する問題。

与えられる数字の列を数列1・数列2・数列3とおくと、数列1→数列2でどの数が消えたか、数列2→数列3でどの数が消えたかを求めます。
しばらく考えていたら、各数列の合計値の差を取れば良いことに気が付きました。この解法はかなり簡単に実装できます。

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<int,int> pint;
#define rep(i,n) for(int i=0;i<(int)(n);i++)
const int INF = 100000000;
const int dx[4]={0,1,0,-1}, dy[4]={-1,0,1,0};
struct P{int x;int y;P(int X=0,int Y=0){x=X;y=Y;}};

int main() {
    int f,s;
    int n;
    cin >> n;

    int sum = 0;
    int sum2 = 0;
    int sum3 = 0;
    rep(i,n) {
        int a;
        cin >> a;
        sum += a;
    }
    rep(i,n-1) {
        int a;
        cin >> a;
        sum2 += a;
    }
    rep(i,n-2) {
        int a;
        cin >> a;
        sum3 += a;
    }

    f = sum - sum2;
    s = sum2 - sum3;

    cout << f << endl;
    cout << s << endl;
    return 0;
}

C以降はまだ解いていません。
それでは。