NOJ---1184---list or deque

今天 浪荡一天了

钱都没了

好吧  感觉 这题 还是不错的 让我又简单学习了2个新stl的容器

              我们先来看下题目吧

               look and touch it

简单 讲下 题目意思:

  给你N个元素组成的集合(随便找的词语来形容)    这n个元素的值 也是 从1到n 

 然后 对你进行m次的询问和执行操作

 如果是Top num 呢  就是把这个集合中 值为num的元素 给放到最前端  不需要进行任何的输出操作

 如果是next呢 就是输出集合首部的元素 并将它放置到元素尾部

 这边 最麻烦的应该就是 top这个操作了  当时 我用了queue做 没想到好的解决方法 因为对于删除num的元素 并将它插入到首部 我卡住了  damn it

  然后 超神在群里说 deque 我对它的概念也只有双端队列 这4个名字 而已....

好吧 那就继续换 存储容器吧 。。

再后来 我就选择用了List来实现  它有个很好的函数 remove( Type value ) 删除 指定的元素  那么我就可以将 指定的Num 删除 其它就很容易实现了

在后来的最后 我去超神写的博客 看到了 原来 deque可以引用下标的 表示 毫不知情 。。。

我把 2种代码 都贴上来 效率 和 内存 上 几乎没什么差别

deque: ------超神版本

 1 #include<cstdio>
 2 #include<deque>
 3 #include<iterator>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     
 9     int T,n,m,i,j,temp;
10     char str[10];
11     while(~scanf("%d",&T))
12     {
13         while(T--)
14         {
15             deque<int>qu;
16             deque<int>::iterator it;
17             scanf("%d%d%*c",&n,&m);
18             for(i=1;i<=n;i++)
19                qu.push_back(i);//注意不是push_front() 
20             while(m--)
21             {
22             scanf("%s",str);
23             if(str[0]=='T')
24             {
25                 scanf("%d%*c",&temp);
26                 for(i=0;i<qu.size();i++)
27                   if(qu[i]==temp)  //双端队列可访问下标 
28                   {
29                       qu.erase(qu.begin()+i);
30                       break;
31                     }
32                 qu.push_front(temp);
33             }
34             else
35             {
36                 int t=qu.front();
37                 qu.pop_front();
38                 printf("%d
",t);
39             }
40             }
41         }
42     }
43     return 0;
44 }
View Code

list ----- 弱渣 版本  求 超神 轻虐 -----

 1 #include <iostream>
 2 #include <list>
 3 using namespace std;
 4 
 5 list<int>li;
 6 char str[6];
 7 int main()
 8 {
 9     int t;
10     int n , m;
11     int num , temp;
12     while( ~scanf("%d",&t) )
13     {
14         while( t-- )
15         {
16             li.clear();
17             scanf( "%d %d",&n,&m );
18             for( int i = 1 ; i<=n ; i++ )
19             {
20                 li.push_back(i);
21             }
22             while( m-- )
23             {
24                 scanf( "%s",str );
25                 if( str[0] == 'T' )
26                 {
27                     scanf( "%d",&num );
28                     li.remove( num );
29                     li.push_front( num );
30                 }
31                 else
32                 {
33                     printf( "%d
",li.front() );
34                     temp = li.front();
35                     li.pop_front();
36                     li.push_back(temp);
37                 }
38             }
39         }
40     }
41     return 0;
42 }
View Code

写完 凌晨1点 再去撸把吧 哎 。。。。

我想 =自己再多学点  把所有stl中容器的所有函数 主要用到的都写出来 供大家分享

突然 有个想法 每天 留句话 和大家分享 //  当然 都是 煽情的 //

我会发着呆然后忘记你
接着紧紧闭上眼
想着那一天会有人代替
让我不再想念你
我会发着呆然后微微笑
接着紧紧闭上眼
又想了一遍你温柔的脸

--------------------------------致 ex

just follow your heart
原文地址:https://www.cnblogs.com/radical/p/3762022.html