HDU 1276 士兵队列训练问题

模拟题,学了一下list

it=li.erase(it):指向删除后的第一个元素

#include <cstdio>

#include <list>

using namespace std;

listli;

list::iterator it;

int main(){

    int cas,n;

    scanf("%d",&cas);

    while(cas--){

        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;

}

你可能感兴趣的:(HDU)