首页 > 其他分享 >题解:P10688 Buy Tickets

题解:P10688 Buy Tickets

时间:2024-08-16 14:19:39浏览次数:13  
标签:Tickets arr Buy int 题解 位置 权值 元素

题目大意

排队时有人插队。

输入格式

给定队列长度 $n$ 。
接下来 $n$ 行每行两个正整数,第一个表示该元素插入位置,另一个表示该元素的权值。

输出格式

按照顺序输出该位置元素的权值。

注意事项

  • 输入的数据组数未知,需要一直输入,输入方法可以参考以下代码。
while (cin>>n){
    //操作
}
  • 由样例可知,排队的位置从 $0$ 开始。

解析

首先要解决这道题第一个问题便是关于插队的处理。
这个人插入到队伍的 $i$ 位置,那么 $i$ 位置后的人的位置都要向后移 $1$ 位。
关于解决这个问题这里有两种方法:

  1. 上篇题解 @ fangminding 大佬的方法:使用 vector 容器中的 insert 函数,具体用法这里不过多赘述,感兴趣的可以去看他的题解。
  2. 本蒟蒻使用的朴素算法,具体解释在代码里:
void charu(int a,int b){
	int t=arr[a];//存储在 a 位置原来的元素权值 
	arr[a]=b;	//将其替换为现在插入的元素权值 
	for(int i=a+1;i<n;i++){//从第 a+1 位开始往后推移 
		int t1=arr[i];//存储第i位的元素权值 
		arr[i]=t; //将第 i 位改为上一位的元素权值 
		t=t1;//将 t 更新 
	}
}

怎么样,是不是很朴素?凸显蒟蒻之菜
解决了这个问题接下来就很简单了:
边插入我们边处理,如果该位置没有人,那肯定最好,直接插入就行,如果有人,那就是上面插队的情况了。
最后附上完整代码:

#include<iostream>
#include<cstring>
using namespace std;
int arr[200005];
int n;
void charu(int a,int b){
	int t=arr[a];//存储在 a 位置原来的元素权值 
	arr[a]=b;	//将其替换为现在插入的元素权值 
	for(int i=a+1;i<n;i++){//从第 a+1 位开始往后推移 
		int t1=arr[i];//存储第 i 位的元素权值 
		arr[i]=t; //将第 i 位改为上一位的元素权值 
		t=t1;//将t更新 
	}
}
int main(){
	while(cin>>n){
		memset(arr,0,sizeof arr);
		for(int i=1;i<=n;i++){
			int a,b;
			cin>>a>>b;
			if(arr[a]==0){//没有人 
				arr[a]=b;
			}else{	//插队 
				charu(a,b);
			}
		}
		for(int i=0;i<n;i++){
			cout<<arr[i]<<' ';
		}
		cout<<endl;//如果你第一个点 wa ,那么可能就是你这里没换行 
	}
	return 0;
}

最后,这是本蒟蒻的第一篇公开题解,审核辛苦了!望通过,若有错误,打下来一点整改!
蒟蒻也想弱弱的说一句:点个赞呗 $qwq$ 。

标签:Tickets,arr,Buy,int,题解,位置,权值,元素
From: https://www.cnblogs.com/zrcdbx/p/18362728

相关文章

  • 题解:P10781 【MX-J1-T1】『FLA - III』Spectral
    P10781【MX-J1-T1】『FLA-III』Spectral题解(非正解,正解应该是数学题。)这道题很简单,分析题意就可以得出核心代码:for(inti=1;i<=n;i++){ans=k+ans/i;}那么恭喜你获得$40$pts。为什么呢?因为题目需要的是最高温度,而烧碳获得的温度可能小于烧炭时减低的温度。简单说......
  • JOISC2020 Day 4 A 首都 题解
    JOISC2020Day4A首都JOIAtCoderLuogu考虑一条链的情形。如图,将每个城市视为一条线段,容易发现交错(有交但不包含)的若干线段必须全部合并才能符合条件。但如果这么写会出错,原因是线段有包含关系,外层线段需要统计内层线段的答案,但内层线段不需要统计外层线段的答案。如果设内......
  • 题解:AT_abc365_d [ABC365D] AtCoder Janken 3
    D-AtCoderJanken3题解题意:高桥和青木要玩石头剪刀布,给你一个长度为\(n\)的字符串\(s\),\(s\)表示青木在第\(i\)局游戏中的动作(R表示石头,P表示布,S表示剪刀。)。高桥不可以在任何一局中输给青木(即:高桥和青木只可以平局或高桥赢青木),且高桥第\(i\)局出的和第\(i-1\)局......
  • 题解:P10313 [SHUPC 2024] 占地斗士!
    题目大意给出一个由.和#组成的\(n\timesm\)矩阵,然后再给你这\(4\)种图像,用着四种图像对矩阵进行覆盖(每个只能用一次)。其中,#的位置不可以被图像遮挡,也不能放在不能放置的格子上。解题思路考虑使用爆搜。第一个图像:if(mp[i][j]!='#'&&mp[i+1][j+1]!='#'......
  • 题解:P10111 [GESP202312 七级] 纸牌游戏
    题目大意给出三个序列:\(a\),\(b\),\(c\)分别表示:分数,罚分以及小杨从第\(1\)轮至第\(......
  • 题解:AtCoder Janken 3
    D-AtCoderJanken3题解题意高桥和青木要玩石头剪刀布,给你一个长度为\(n\)的字符串\(s\),\(s\)表示青木在第\(i\)局游戏中的动作(R表示石头,P表示布,S表示剪刀)。高桥不可以在任何一局中输给青木(即:高桥和青木只可以平局或高桥赢青木),且高桥第\(i\)局出的和第\(i-1\)局......
  • Codeforces 232 B Table 题解 [ 蓝 ] [ 分组背包 ] [ 组合数学 ] [ 循环节 ]
    Codeforces232BTable。蒟蒻模拟赛上场切的一道蓝,非常难以置信我竟然能做蓝题。这题的数据范围初看还是比较坑的,\(10^{18}\)的值域很容易让人往矩阵加速那方面想。实际上在列出转移方程式后,我们发现状态是二维的,无法使用矩阵加速(或者说这样做很麻烦)。思路首先观察到每个边长......
  • AT_agc025_b RGB Coloring 题解
    ProblemSolution由于涂绿色的得分为\(A+B\),所以可以将红色与蓝色独立考虑。依次枚举红色的个数,假定为\(i\),所以剩余需要的得分为\(K-i\timesA\),判断是否能被\(B\)整除,若能,则蓝色个数为\(\frac{K-i\timesA}{B}\),设为\(j\),则总方案累加\(C^{i}_{n}\timesC^{j}_{n}\),除......
  • [Ynoi2016] 镜中的昆虫 题解
    难度在最近遇到的题里相对较高,在这里写一篇珂学题解。(以下是学校给的部分分)\(20\%\):直接暴力枚举。另外\(20\%\):假如我们取\(pre\),对于\(pre<l\)的,\(ans++\),明显二维偏序,树状数组或\(cdq\)即可,时间复杂度\(O(n\logn)\)。另外\(40\%\):相当于多加一个时间维,三维偏序,\(......
  • DELPHI四舍五入问题解决
    转自http://www.delphitop.com/html/jichu/153.html 感谢原作者。 这段时间在用DELPHI做一个财务系统时发现每一行的小计取了两位小数后与用SQL的ROUND查询出来的不一样,在程序中是用FormatFloat('0.00',ItemSum)函数来取值的,再用DXDBGRID网格显视合计,最终与SELECTSUM(ROUND(......