hdu1276士兵队列训练问题[简单STL list]

目录

  • 题目地址
  • 题干
  • 代码和解释

题目地址

hdu1276

题干

代码和解释

本题使用了STL中的list,STL的list是双向链表。它的内存空间不必连续,通过指针来进行数据的访问,高效率地在任意地方删除和插入,插入和删除操作时常数时间。list和vector的优缺点正好相反,它们的应用场景不同:
(1)vector:插入和删除操作少,随机访问元素频繁
(2)list:插入和删除频繁,随机访问较少。
使用链表list时,我们需要用到迭代器。比如本题的代码中,list的类型是int,所以我们定义迭代器的方式是list<int>::iterator it;。这个it相当于一个指针,辅助我们对链表的处理。比如,对于链表a中的第一个元素的值,我们不能直接使用a[0]来表示,而是应该用*it,此处的it指向a的开始,it=a.begin();
当然,使用STL list时要注意头文件#include<list>
下面是本题的c++代码

#include<iostream>
#include<list>
using namespace std;
int main()
{
    int N;
    int x;
    int i;
    list<int> a;
    list<int>::iterator it;
    int k;
    scanf("%d",&N);
    while(N--){
        scanf("%d",&x);
        a.clear();
        for(i=0;i<x;i++){
            a.push_back(i+1);//存每个士兵的编号(索引加1)
        }
        k=2;//第一次删喊“2”的
        while(a.size()>3){
            i=0;
            for(it=a.begin();it!=a.end();){
                if((i+1)%k==0){//删除喊“k”的士兵
                    it=a.erase(it);//it指到下一位的地址
                }
                else{
                    it++;//it指到下一位的地址
                }
                i++;
            }
            if(k==2) k = 3;
            else k = 2;
        }
        for(it=a.begin();it!=a.end();){
            printf("%d",*it);
            it++;
            if(it!=a.end()) printf(" ");
            else printf("\n");
        }
    }
    return 0;
} 

原文地址:https://www.cnblogs.com/hardcoreYutian/p/11367077.html

时间: 2024-08-12 09:00:27

hdu1276士兵队列训练问题[简单STL list]的相关文章

HDU1276 士兵队列训练问题

士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3356    Accepted Submission(s): 1552 Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进

(hdu step 8.1.6)士兵队列训练问题(数据结构,简单模拟——第一次每2个去掉1个,第二次每3个去掉1个.知道队伍中的人数&lt;=3,输出剩下的人 )

题目: 士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 56 Accepted Submission(s): 37   Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三

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

原题代号:HDU 1276 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1276 题目原题: 士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8914    Accepted Submission(s): 3940 Problem Description 某部队进行新兵队

Week 1 # G 士兵队列训练问题

原题描述: G - 士兵队列训练问题 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数...,以后从头开始轮流进行一至二报数.一至三报数直到剩下的人数不超过三人为止. Input 本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000. Output 共有N行,分别对应输入的新兵人数

士兵队列训练问题(杭电1276)

/*士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3585    Accepted Submission(s): 1674 Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开

用链表实现轻院1276士兵队列训练问题

士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8554    Accepted Submission(s): 3809 Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行

HDU 1279 士兵队列训练问题

士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4602    Accepted Submission(s): 2145 Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进

hdoj 1276 士兵队列训练问题【模拟】

士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4558    Accepted Submission(s): 2125 Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行

Problem1276 士兵队列训练问题

士兵队列训练问题 http://acm.hdu.edu.cn/showproblem.php?pid=1276 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12841    Accepted Submission(s): 5641 Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行