HDU 1612 The Blocks Problem 模拟 不会PE代码


题意:不妨见紫书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);
                }
        }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值