UVA101

来源:互联网 发布:知乎三里屯不知道诊所 编辑:程序博客网 时间:2024/05/19 01:07
#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>#include<map> #include<set>#include<sstream>#include<cassert>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 30;int n;vector<int> pile[maxn];void find_block(int a, int &p, int &h){    for (p = 0; p < n; p++)        for (h = 0; h < pile[p].size(); h++)            if (pile[p][h] == a)                return;}void clear_above(int p, int h){    for (int i = h + 1; i < pile[p].size(); i++)    {        int b = pile[p][i];        pile[b].push_back(b);    }    pile[p].resize(h + 1);}void pile_onto(int p, int h, int p2){    for (int i = h; i < pile[p].size(); i++)        pile[p2].push_back(pile[p][i]);    pile[p].resize(h);}void print(){    for (int i = 0; i < n; i++)    {        printf("%d:", i);        for (int j = 0; j < pile[i].size(); j++)            printf(" %d", pile[i][j]);        printf("\n");    }}int vs_main(){    int a, b;    cin >> n;    string s1, s2;    for (int i = 0; i < n; i++)        pile[i].push_back(i);    cin.sync_with_stdio(false);    while (cin >> s1 >> a >> s2 >> b)    {        int pa, pb, ha, hb;        find_block(a, pa, ha);        find_block(b, pb, hb);        if (pa == pb)            continue;        if (s2 == "onto")clear_above(pb, hb);        if (s1 == "move")clear_above(pa, ha);        pile_onto(pa, ha, pb);    }    print();    return 0;}int main(){    int start = clock();    freopen("in.txt", "r", stdin);    //freopen("E:/out.txt","w",stdout);    printf("#===================#\n");    vs_main();    printf("#===================#\n");    printf("Time:%.3lf\n", double(clock() - start) / CLOCKS_PER_SEC);    //system("pause");    return 0;}
#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>#include<map> #include<set>#include<sstream>#include<cassert>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 30;vector<int>pile[maxn];int n;void find(int a, int &p, int &h){    for (int i = 0; i < n; i++)    {        for (int j = 0; j < pile[i].size(); j++)        {            if (pile[i][j] == a)            {                p = i;                h = j;                return;            }        }    }    return;}void clear_above(int p, int &h){    for (int i = h + 1; i <pile[p].size(); i++)        pile[pile[p][i]].push_back(pile[p][i]);    pile[p].resize(h + 1);}void pile_to(int pa, int ha, int pb){    for (int i = ha; i < pile[pa].size(); i++)        pile[pb].push_back(pile[pa][i]);    pile[pa].resize(ha);    }void print(){    for (int i = 0; i <n; i++)    {        printf("%d: ", i);        for (int j = 0; j < pile[i].size(); j++)            cout << pile[i][j] << " ";            cout << endl;    }}int vs_main(){    string s1, s2;    int a, b;    cin >> n;    cin.sync_with_stdio(false);    for (int i = 0; i < n; i++)    {        pile[i].push_back(i);    }    while (cin >> s1 >> a >> s2 >> b)    {        int pa, pb, ha, hb;        find(a, pa, ha);        find(b, pb, hb);        if (pa == pb)            continue;        if (s1 == "move")clear_above(pa, ha);        if (s2 == "onto")clear_above(pb, hb);        pile_to(pa,ha,pb);    }    print();    return 0;}int main(){    int start = clock();    freopen("in.txt", "r", stdin);    //freopen("E:/out.txt","w",stdout);    printf("#===================#\n");    vs_main();    printf("#===================#\n");    printf("Time:%.3lf\n", double(clock() - start) / CLOCKS_PER_SEC);    //system("pause");    return 0;}
0 0
原创粉丝点击