2016년 5월 11일 수요일

2082 - 시계

https://www.acmicpc.net/problem/2082

각 자리에서 가능한 후보들을 추린다.
어떤 숫자가 나타나려면 다음과 같은 조건을 만족해야한다.
  • 시계에 불이 들어와있다면, 수 $X$도 그 자리가 켜져있어야한다.
  • 수 $X$에 불이 꺼져있는 자리는, 시계에도 불이 꺼져있어야한다.
  • 시계에 불이 꺼져있어도, 수 $X$에 불이 들어온것과는 상관이 없다.


#include <bits/stdc++.h>
using namespace std;

char digit[10][17]={
    "####.##.##.####",
    "..#..#..#..#..#",
    "###..#####..###",
    "###..####..####",
    "#.##.####..#..#",
    "####..###..####",
    "####..####.####",
    "###..#..#..#..#",
    "####.#####.####",
    "####.####..####"
};

vector<int> cand[4];
char input[5][17];

bool match(int x, int k){
    for(int i=0; i<5; ++i){
        for(int j=0; j<3; ++j){
            if(input[i][x+j] == '#' && digit[k][i*3+j] == '.') return false;
        }
    }
    return true;
}

int main(){
    for(int i=0; i<5; ++i) gets(input[i]);
    int timer[4]={2, 9, 5, 9};
    for(int x=0; x<4; ++x){
        for(int k=0; k<=timer[x]; ++k){
            if(match(4*x, k)){
                printf("%d", k);
                break;
            }
        }
        if(x==1) putchar(':');
    }
    
    return 0;
}
댓글 쓰기

게시글 목록