题解: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

}


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