• 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 } 
    每一个不曾起舞的日子,都是对生命的辜负。
  • 相关阅读:
    css3学习 之 css选择器(结构性伪类选择器)
    flash如何实现Enumeration
    带参数的正则匹配
    css学习记录(overflow:hidden)
    JavaScript的函数
    HTML5实现网站在windows8中的贴靠
    Modernizr 让网站进行优雅降级
    ASP.NET Web API教程(三) 增删改
    Compat Inspector 微软内部使用的兼容性检测工具
    Javascript 高级手势
  • 原文地址:https://www.cnblogs.com/randy-lo/p/12607874.html
Copyright © 2020-2023  润新知