SGU 271 Book Pile(deque)

题意:

一开始桌子上从上到下放着N本书(从上往下输入)
M组操作:
1.将前K本书翻转,2.在头上加一本书。最后输出书的顺序。(从上往下输出)

tip:

看起来像splay==线性做法是用deque 上面k本维护一个。。下面的一次往上添加,每次遇到add先加到上面的deque里,如果超过了k本,拿下最下面的给到另一个deque。。。需要注意的是,本题减小时间复杂度的突破口就是如何不真的旋转,而能做到旋转,设置flag。如果当前状态翻转,那么deque1的最上面那个是真实的最下面,加入的时候也要判断一下,加到deque1的front还是back

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <deque>
#include <string>
using namespace std;
deque<string> q1,q2;
int n,m,k,flag;
char r[20];
void init(){
    string s;
    scanf("%d%d%d",&n,&m,&k);
    for(int i = 1; i <= n ; i++){
        cin >> s;
        if(i <= k )
            q1.push_back(s);
        else    q2.push_back(s);
    }
}
void sov(){
    for(int i = 1; i <= m ; i++){
        scanf("%s",r);
        if(r[0] == 'R') {
            flag ^= 1;
            continue;
        }
        int len = strlen(r),f = 0;
        string add;
        for(int i = 0 ; i <len ; i++){
            if(r[i] == ')') break;
            if(r[i] == '(') f = 1;
            if(f == 1 && r[i] >= 'A'&& r[i] <= 'Z')
                add += r[i];
        }
        if(flag)    q1.push_back(add);
        else        q1.push_front(add);
        if(q1.size() > k){
            if(flag){
                q2.push_front(q1.front());
                q1.pop_front();
            }
            else{
                q2.push_front(q1.back());
                q1.pop_back();
            }
        }
    }
}
void print(){
    if(flag){
        while(q1.size()){
            cout << q1.back()<<endl;
            q1.pop_back();
        }
    }
    else{
        while(q1.size()){
            cout << q1.front()<<endl;
            q1.pop_front();
        }
    }
    while(q2.size()){
        cout << q2.front()<<endl;
        q2.pop_front();
    }
}
int main(){
    init();
    sov();
    print();
}
阅读更多
版权声明:转我原创记得说你是我的脑残粉哟 https://blog.csdn.net/zjy2015302395/article/details/77978472
个人分类: acm 基本算法
想对作者说点什么? 我来说一句

sgu 271

双向队列

cyxhahaha cyxhahaha

2015-06-27 10:05:35

阅读数:272

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭