hdu 1276 士兵队列训练问题(STL的list)

#include<stdio.h>
#include<list>
using namespace std;
list<int>li;
list<int>::iterator it;
int main()
{
    int _case,n;
    scanf("%d",&_case);
    while(_case--)
    {
        li.clear();
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
            li.push_back(i);
        int k=0;
        while(li.size()>3)
        {
            int k1=0,k2=1;
            if(!k)
            {
                for(it=li.begin(); it!=li.end();)
                {
                    if(k1)
                    {
                        it=li.erase(it);
                        k1=0;
                    }
                    else
                    {
                        k1=1;
                        it++;
                    }
                }
                k=1;
            }
            else
            {
                for(it=li.begin(); it!=li.end();)
                {
                    if(k2==3)
                    {
                        it=li.erase(it);
                        k2=1;
                    }
                    else
                    {
                        k2++;
                        it++;
                    }
                }
                k=0;
            }
        }
        it=li.begin();
        printf("%d",*it);
        it++;
        for(; it!=li.end(); it++)
            printf(" %d",*it);
        printf("\n");
    }
    return 0;
}

 删除的注意:    

           it=li.erase(it);指向删除后的后一个元素;
原文地址:https://www.cnblogs.com/XDJjy/p/3109298.html