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; }
愿你出走半生,归来仍是少年