UVA127 "Accordian" Patience 【模拟】

来源:互联网 发布:ios 淘宝下拉刷新 编辑:程序博客网 时间:2024/06/06 01:19

题目链接:https://vjudge.net/problem/UVA-127

题意:
见紫书P179 习题6-9的题目描述。

题解:
模拟题,按照题目叙述移动直到某一次没法移动为止。
P.S:注意细节,有个 n = 52 我放在了循环外面调了一下午= =b

代码:

// by DenyTianly#include <cstdio>#include <vector>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;const int inf = 1 << 26;struct pok {    char s[105];    pok() {}    pok(char *q) {        strcpy(s, q);    }};int n;const int size = 1005;vector<pok> pile[size];bool iCompare(pok a, pok b) {    if(a.s[0] == b.s[0] || a.s[1] == b.s[1]) return true;    return false;}void move(int x) {    for ( int i = x; i < n; i ++ ) {        pile[i].clear();        for ( int j = 0; j < pile[i+1].size(); j ++ ) {            pile[i].push_back( pok(pile[i+1][j].s) );        }    }}int main(){//  freopen("UVA127.in", "r", stdin);    char str[105];    while( scanf("%s", str), str[0] != '#' ) {        n = 52;        pile[0].push_back( pok(str) );        for ( int i = 1; i < n; i ++ ) {            scanf("%s", str);            pile[i].push_back(pok(str));        }        bool fg = true;        while( fg ) {            fg = false;            for ( int i = 1; i < n; i ++ ) {                int y = i-3;                int cur = pile[i].size()-1;                int cury = pile[y].size()-1;                if(y >= 0 && iCompare(pile[i][cur].s, pile[y][cury].s)) {                    pile[y].push_back(pok(pile[i][cur].s));                    pile[i].pop_back();                    if(pile[i].size() == 0) {                        -- n;                        move(i);                    }                    fg = true;                    break;                }                int x = i-1;                int curx = pile[x].size()-1;                if(x >= 0 && iCompare(pile[i][cur].s, pile[x][curx].s)) {                    pile[x].push_back(pok(pile[i][cur].s));                    pile[i].pop_back();                    if(pile[i].size() == 0) {                        -- n;                        move(i);                    }                    fg = true;                    break;                }            }        }           printf("%d pile%sremaining:", n, n==1?" ":"s ");        for ( int i = 0; i < n; i ++ ) printf(" %d", pile[i].size());        puts("");        for ( int i = 0; i < 52; i ++ ) pile[i].clear();    }    return 0;}
0 0
原创粉丝点击