본문 바로가기
알고리즘/Codeforces

Codeforces Round #664 (Div. 2) AB

by 유시은 2020. 8. 13.
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
 
int T;
int r, g, b, w;
 
int main() {
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(0);
 
    cin >> T;
    while (T--) {
        cin >> r >> g >> b >> w;
 
        int r_, g_, b_, w_;
        r_ = r % 2;
        g_ = g % 2;
        b_ = b % 2;
        w_ = w % 2;
 
        if (r == 0 || g == 0 || b == 0) {
            if (r_ + g_ + b_ + w_ == 3 || r_ + g_ + b_ + w_ == 2) cout << "No\n";
            else cout << "Yes\n";
            continue;
        }
        if (r_ + g_ + b_ + w_ != 2) {
            cout << "Yes\n";
        }
        else cout << "No\n";
    }
 
    return 0;
}

 

A - Boboniu Likes to Color Balls

 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
 
bool visit[101][101];
 
bool orun = true;
int N, M, r, c;
int vcount;
 
void prnt() {
    cout << r << " " << c << "\n";
}
 
void move(int r_, int c_) {
    r = r_;
    c = c_;
    if (!visit[r][c]) prnt();
    visit[r][c] = true;
}
 
void to_tl() {
    move(1, c);
    move(r, 1);
}
 
int main() {
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(0);
    cin >> N >> M >> r >> c;
    prnt();
    visit[r][c] = true;
    to_tl();
    while (1) {
        if (orun) {
            if (c + 1 <= M) move(r, c + 1);
            else {
                orun = false;
                if (r + 1 <= N) move(r + 1, c);
                else break;
            }
        }
        else {
            if (c - 1 > 0) move(r, c - 1);
            else {
                orun = true;
                if (r + 1 <= N) move(r + 1, c);
                else break;
            }
        }
    }
 
    return 0;
}

 

B - Boboniu Plays Chess

 

 

최초 위치를 Y, X라고 하자.

 

(1, X)로 이동한 다음 (1, 1)로 이동하면 시작 위치 (1, 1)를 제외한 모든 행의 양 끝이 방문되지 않았음이 보장된다.

 

이제 (1, R) > (2, R) > (2, 1) > (3, 1) > (3, R) > ... 경로로 순회하면 된다.

댓글