题意:不妨见紫书110页……懒死了
思路:不如读者在紫书110页看题意的时候顺便看看题解…………
那我写这篇博客是为了什么啊?!?!
以下废话才是我写这篇博客的原因:
9个月以前,我还是对编程什么不懂的小白,因为自己是杭电学生嘛,难免对ACM很向往,然后刘老师每周三在杭电都有一节公选课,当然讲得就是ACM的基础知识啦,很火爆,自己虽然没选到这门课,还是每周请假去旁听。于是就入坑了啊,于是就过上天天刷题的日子了啊,于是前期每场比赛都被OI选手虐啊。
回想当时,连sort是啥都不知道,看了谭浩强的C语言入门,一直以为选择法是最快的排序算法…………(满脸黑线)
反正后来就有人推荐我紫书了,(如果你也是刚入门的新手,推荐你也买一本,和白书一套买,别买什么c++ prime plus,那书讲得是各种高级语法,不是算法)。
然后紫书上就有这道题啊,当时不知道stl,觉得这些东西真神奇,于是就照着紫书码一遍,其它oj可过,可在hdoj上就是过不了……知道是这题目数据有问题啦,本来想不管的,可自己有点强迫症,而且还是杭电的,有点下意识地很看重hdoj……觉得自己hdoj的账号上一直有一题没过,好纠结。于是我现在终于知道如何不会PE了,这都是自己努力学习的结果哈哈哈哈(我才不会告诉你这后面有什么肮脏的Python交易呢= =)
总之,见print()函数,然后你就知道正确的输出格式了
#include<iostream>
#include<vector>
#include<string>
#include<cstdio>
using namespace std;
const int MAXN=25+5;
vector<int >block[MAXN];
int n;
void find(int a,int &p,int &h)
{
for(p=0;p<n;++p)
{
for(h=0;h!=block[p].size();++h)
{
if(block[p][h]==a) return;
}
}
}
void clean_above(int p,int h)
{
for(int i=h+1;i!=block[p].size();++i)
{
int b=block[p][i];
block[b].push_back(b);
}
block[p].resize(h+1);
}
void move(int pb,int pa,int ha)
{
for(int i=ha;i!=block[pa].size();++i)
{
int c=block[pa][i];
block[pb].push_back(c);
}
block[pa].resize(ha);
}
void print()
{
for(int i=0;i<n;++i)
{
if(i<10) putchar(' ');
printf("%d: ",i);
for(int j=0;j<block[i].size();++j)
{
printf(" %d",block[i][j]);
}
putchar(10);
}
}
int main()
{
string s1,s2;
int a,b;
while(cin>>n)
{
for(int i=0;i<n;++i)
{
block[i].clear();
block[i].push_back(i);
}
while(cin>>s1)
{
if(s1=="quit")
{
print();
break;
}
cin>>a>>s2>>b;
int pa,ha,pb,hb;
find(a,pa,ha);
find(b,pb,hb);
if(pa==pb) continue;
if(s1=="move") clean_above(pa,ha);
if(s2=="onto") clean_above(pb,hb);
move(pb,pa,ha);
}
}
}
版权声明:本文为dpppBR原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。