X-man

导航

Problem 1462 - Books changing(模拟题STL数据结构)

http://acm.whu.edu.cn/land/problem/detail?problem_id=1462

#include<stdio.h>
#include<list>
#include<deque>//TLE
//#incldue<fstream>
#include<iostream>
using namespace std;
//list<int>la,lb,lc;
//list<int>::reverse_iterator rit;
//list<int>::iterator it;
deque<int>la,lb,lc;
deque<int>::reverse_iterator rit;
deque<int>::iterator it;
/*int pf(deque<int>a)
{
    for(it=a.begin();it!=a.end();it++)
    printf(" %d*",*it);
    printf("\n");
}*/
int main()
{
    int _case,n,x,y;
    int ii;
    scanf("%d",&_case);
    for(ii=1;ii<=_case;ii++)
    {
        la.clear();
        lb.clear();
        lc.clear();
        int jr=0;//odd or even
        scanf("%d %d %d",&n,&x,&y);
        for(int i=1; i<=n; i++) //initialize la
        la.push_back(i);
        while(lc.size()<n)
        {

            if(jr==0)
            {
                if(la.size()>=x)
                {
                    for(int i=0; i<x; i++)
                    {
                        lb.push_back(*(--la.end()) );
                        la.erase(--la.end());
                    }

                }
                else if(la.size()!=0)
                {
                    for(int i=0; la.size(); i++)
                    {
                        lb.push_back(*(--la.end()));
                        la.erase(--la.end());
                    }
                }

                if(lb.size()>=y)
                {
                    for(int i=0; i<y; i++)
                    {
                        lc.push_back(*(--lb.end()));
                        lb.erase(--lb.end());
                    }
                }
                else if(lb.size()!=0)
                {
                    for(int i=0;lb.size();i++)
                    {
                        lc.push_back(*(--lb.end()));
                        lb.erase(--lb.end());
                    }
                }
                jr=1;
        //pf(la);
        //pf(lb);
        //pf(lc);printf("#######ji\n");
            }
            if(jr==1)
            {
                if(la.size()>=x)
                {
                    for(int i=0;i<x;i++)
                    {
                        lb.push_front(*la.begin());
                        la.erase(la.begin());
                    }
                }
                else if(la.size()!=0)
                {
                    for(int i=0;la.size();i++)//i<la.size()
                    {
                        lb.push_front(*la.begin());
                        la.erase(la.begin());
                    }
                }
                if(lb.size()>=y)
                {
                    for(int i=0;i<y;i++)
                    {
                        lc.push_back(*lb.begin());
                        lb.erase(lb.begin());
                    }
                }
                else if(lb.size()!=0)
                {
                    for(int i=0;lb.size();i++)//i<
                    {
                        lc.push_back(*lb.begin());
                        lb.erase(lb.begin());
                    }
                }
                jr=0;
        //pf(la);
        //pf(lb);
        //pf(lc);printf("######ou\n");
            }
        }
        printf("Case %d:",ii);
        for(rit=lc.rbegin();rit!=lc.rend();rit++)
        printf(" %d",*rit);
        printf("\n");
    }
    return 0;
}

 

 !刚开始用的是list(双向循环链表),TLE。

后来分析才发现双向循环链表,根本就用不上。改为deque就AC了

(仅仅的换了存储结构,其他代码偶不用改,STL够强大,通用性也好!!)!

posted on 2013-05-01 13:26  雨钝风轻  阅读(231)  评论(0编辑  收藏  举报