2016년 5월 18일 수요일

Codeforces Round #353 (Div. 2)

http://codeforces.com/contest/675

A. Infinite Sequence

$a$에서 $c$의 차이만큼 계속 더해서 $b$를 만들 수 있는가를 묻는 문제이다.
직접 돌리는건 안된다. 예를 들어, $c=0$ 이기만해도 반복문으로는 안된다.

$ a+k*c == b $ 가 되는 $k$가 존재하는 가? 다시말해, $(b-a) \mod c == 0$ 인가? 이다.
#include <bits/stdc++.h>
using namespace std;

int main(){
        int a, b, c;
        while(~scanf("%d %d %d", &a, &b, &c)){
        if(c == 0) puts( a == b ? "YES" : "NO" );
        else if(c > 0 && b < a) puts("NO");
        else if(c < 0 && b > a) puts("NO");
        else puts( (b-a)%c == 0 ? "YES":"NO" );
    }
    
    return 0;

}

B. Restoring Painting

2x2크기로 묶었을때 나오는 사각형 안의 수들의 합이 모두 같아지게 하는 빈칸의 경우의 수를 묻는 문제였다. 문제의 핵심은 정가운데 $?$는 전체 합에 영향을 미치지 않는다는 것이다.
그럼 나머지 모서리에 있는 4개의 $?$ 중에 하나를 설정해보면 나머지 물음표가 모두 해결되서, 이게 가능한 수인지 판별이 가능하다.
한 모서리 칸을 1~$N$까지 하나씩 설정하면서 가능한 경우를 세면 된다.

근데 코딩이 말려서 계속 틀렸다. 흠.. 분발해야겠다.
댓글 쓰기

게시글 목록