题解:P10688 Buy Tickets

· · 题解

题目:P10688 Buy Tickets

思路

这道题主要就是在第 i 个人后插一个数字是 j 的人,而这个操作做了 n 次。

样例解读

数据一:

第一个人 第二个人 第三个人 第四个人
第一次 77 - - -
第二次 77 51 - -
第三次 77 33 51 -
第四次 77 33 69 51

所以数据一输出77 33 69 51

数据二:

第一个人 第二个人 第三个人 第四个人
第一次 20523 - - -
第二次 20523 19243 - -
第三次 20523 38900 19243 -
第四次 31492 20523 38900 19243

所以数据二输出31492 20523 38900 19243

Code

#include<bits/stdc++.h>
#define io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
int main(){
    io
    int n;
    while(cin>>n){
        vector<int> Q;
        for(int i=1;i<=n;i++){
            int a,b;
            cin>>a>>b;
            Q.insert(Q.begin()+a,b);
        }
        for(int i=0;i<n;i++){
            cout<<Q[i]<<' ';
        }
        cout<<"\n";
    }
    return 0;
}

分析

第 2 行,定义输入输出宏。(用cin,cout的一定一定要加,不然有的题要 TLE ,用printf,scanf的不需要加,这个加速管不到他们,也不用管他们)
第 5 行,调用宏。(你写了不调用当空气,宏不是自动执行的,新手注意)
第 8 行,输入。(详见知识点)
第 8 行,建立一个容器。(存队伍)(详见知识点)
第 9 行,输入+插队循环 。 第 12 行,在容器里模拟“插队操作” 。 第 14 行,输出循环。(注意: vector 容器可以像数组访问一样随机访问,但是下标从 0 开始)
第 15 行,输出整个 Q 。 第 17 行,在每一组数据点后换行。(新手不要再用endl了,慢的很,加速都加不了;用"\n"更快还方便)

知识点

1.while(cin>>n)

代表输入 n,一直输入到结尾(换行)。

2.vector

一种容器,详细介绍。
begin()

即返回这个序列的起始位置。

insert(i,j)

在本题中模拟“插队”动作,
意思是“在序列(vector)的第 i 项后插入 j
这里就是在 a 后面“插”一个人,序号是 b

c++模板

有些新手才入门,我分享一下模板代码。(带加速,printf,scanf的不需要加)


#include<bits/stdc++.h>//万能库
#define io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);//加速
using namespace std;//用命名空间
int main(){//主函数
io//加速
return 0;//要返回0,不然有点平台要RE

}


------------------------------完------------------------------