hdu1276STL链表的应用

Posted randy-lo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1276STL链表的应用相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1276

题目给出一个数n,表示序列长度是n,且第i位为i,操作是从中删除二的倍数,然后重新组数,再删除三的倍数,然后重新组数,这样循环迭代,直到数的数量小于三。因为只有删除操作,而且每次删除之后的数都要重新组合,所以我们想到了一种高效删除和添加的数据结构——链表,这种数据结构删除和插入的时间复杂度是常数的,这是基于链表的存储方式的,改变指针指向一个地址的操作是常数时间的。

代码如下:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef unsigned int ui;
 4 typedef long long ll;
 5 typedef unsigned long long ull;
 6 #define pf printf
 7 #define mem(a,b) memset(a,b,sizeof(a))
 8 #define prime1 1e9+7
 9 #define prime2 1e9+9
10 #define pi 3.14159265
11 #define lson l,mid,rt<<1
12 #define rson mid+1,r,rt<<1|1
13 #define scand(x) scanf("%llf",&x) 
14 #define f(i,a,b) for(int i=a;i<=b;i++)
15 #define scan(a) scanf("%d",&a)
16 #define mp(a,b) make_pair((a),(b))
17 #define P pair<int,int>
18 #define dbg(args) cout<<#args<<":"<<args<<endl;
19 #define inf 0x7ffffff
20 inline int read(){
21     int ans=0,w=1;
22     char ch=getchar();
23     while(!isdigit(ch)){if(ch==-)w=-1;ch=getchar();}
24     while(isdigit(ch))ans=(ans<<3)+(ans<<1)+ch-0,ch=getchar();
25     return ans*w;
26 }
27 int n,m,t;
28 const int maxn=1e4+10;
29 int main()
30 {
31     //freopen("input.txt","r",stdin);
32     //freopen("output.txt","w",stdout);
33     std::ios::sync_with_stdio(false);
34     t=read();
35     while(t--)
36     {
37         n=read();
38         int num=2;
39         list<int> l;
40         list<int>::iterator it;//声明链表的迭代器
41         f(i,1,n)l.push_back(i);
42         while(l.size()>3)
43         {
44             int i=1;
45             it=l.begin();
46             while(it!=l.end())
47             {
48                 if(!(i++%num))it=l.erase(it);//删除之后返回下一个位置的指针
49                 else it++; 
50             }
51             if(num==2)num=3;
52             else num=2;
53         }
54         it=l.begin();
55         while(it!=l.end())
56         {
57             if(it==l.begin())pf("%d",*it);
58             else pf(" %d",*it);
59             it++;
60          }
61          pf("
"); 
62     }
63 } 

 

以上是关于hdu1276STL链表的应用的主要内容,如果未能解决你的问题,请参考以下文章

hdu-1276 士兵队列训练问题

hdu 4841 用stl::vector解决约瑟夫问题

HDU 1276 士兵队列训练问题(模拟)

hdu 1276士兵队列问题queue

静态链表,双向链表,STL list

list的使用-Hdu 1276