ACM日记_17.3.27——偷懒的字符串处理一道

来源:互联网 发布:37周胎儿b超数据标准 编辑:程序博客网 时间:2024/05/19 09:51

因为是从小伙伴那里拿来的题目,不知出处,只好归为日记下的一篇。

这道题目很简单,代码也不是我敲的咳咳咳,但是字符串处理乍一看真是挺吓人,不过稍稍用点string类就瞬间简单许多,遂记之。

题目:













代码如下:

//3.26#include <cstdio>#include <vector>#include <iostream>#include <string>using namespace std;const int maxn=30;int n;vector <int> pile[maxn];void find_block(int a,int& pa,int &ha){    for(pa=0;pa<n;pa++)        for(ha=0;ha<pile[pa].size();ha++)    {        if(pile[pa][ha]==a)            return;    }}void clear_above(int pa,int ha){   int i;    for(i=ha+1;i<pile[pa].size();i++)    {        int b=pile[pa][i];        pile[b].push_back(b);    }    pile[pa].resize(ha+1);}void pile_onto(int pa,int ha,int pb){   int i;    for(i=ha;i<pile[pa].size();i++)    {        pile[pb].push_back(pile[pa][i]);    }    pile[pa].resize(ha);}void print(){   int i,j;    for(i=0;i<n;i++)    {    printf("%d:",i);        for(j=0;j<pile[i].size();j++)        printf(" %d",pile[i][j]);        printf("\n");    }}int main(){    int a,b;    string s1,s2;    cin >> n;    for(int i=0;i<n;i++)    {        pile[i].push_back(i);    }    while(cin >> s1>> a >> s2 >> b)    {   if(s1=="quit")        break;        int pa,pb;        int ha,hb;        find_block(a,pa,ha);        find_block(b,pb,hb);        if(pa==pb)        continue;        if(s1=="move")            clear_above(pa,ha);        if(s2=="onto")            clear_above(pb,hb);        pile_onto(pa,ha,pb);    }    print();    return 0;}


0 0
原创粉丝点击