2015年2月3日 星期二

2015/02/03 2014-2015 ACM-ICPC, Central Europe Regional Contest (CERC 14), problem: (H) Good morning!

#include <iostream>
#include <cstdio>
#include <queue>

using namespace std;

deque<int> deq;

bool OK(int x)
{
    if( x == 0 ) return true;

    int _x = x;

    deq.clear();

    while( _x )
    {
        deq.push_front(_x%10);
        _x /= 10;
    }

    int past = 1;

    for(int di = 0; di < deq.size(); di++)
    {
        if( past == deq[di] );
        else if( deq[di] == 0 )
        {
            if( past%3 );
            else return false;
        }
        else if( past == 0 ) return false;
        else
        {
            if( (past-1)%3+1 <= (deq[di]-1)%3+1 && (past-1)/3 <= (deq[di]-1)/3 );
            else return false;
        }

        past = deq[di];
    }

    return true;
}

int T;

int main()
{
    scanf("%d", &T);

    while( T-- )
    {
        int k;
        scanf("%d", &k);

        for(int i = 0; ; i++)
        {
            if( k-i >= 0 && OK(k-i) )
            {
                printf("%d\n", k-i);
                break;
            }

            if( OK(k+i) )
            {
                printf("%d\n", k+i);
                break;
            }
        }
    }
}

沒有留言:

張貼留言