C语言之排队(待解决:暂时不会)

欢迎进入我的C语言世界

题目

Problem Description

一些人在排队买车票,假设每个人都有不同的买票紧急程度,如果某个人的紧急程度比排在他前一个的人的紧急程度更大,则这个人可以和前一个人调换位置,并且假设每个人都有一个耐心值,若某人的耐心值为x,则他最多可以向前调换x次,当然前提是他之前x个人的紧急程度都比他小,若遇到前面一个人紧急程度比他大的他将停止往前调换。现假设有N个人,按顺序一个个进入队列,并且每进去一个人立即按照紧急程度和其耐心值向前进行调换,调换停止后下一个人才进入队列。给出这N个人的紧急程度和耐心值,问最终的排队情况。

Input

第一行输入一个整数T,表示数据组数。接下来T组数据,对于每组数据,第一行输入一个整数n (1<=n<=10^5),接下来第2到n+1行每行输入两个整数a[i],c[i] (1<=a[i]<=n,0<=c[i]<=n),分别表示第i个人的紧急程度在n个人种排第几及其耐心值,a[i]越大表示紧急程度越大。

Output

对于每组数据,请输出一行n个数,以一个空格隔开,表示最终队列的排队情况,第i个数表示最终排在第i个位置的人是第几个进入队列的。

Sample Input

1
5
2 3
1 4
4 3
3 1
5 2

Sample Output

3 1 5 4 2

答案(错误代码)

下面展示 实现代码

#include <iostream>
#include <stdio.h>
using namespace std;
struct node
{
    
    
	int x;
	int y;
	int num;
};
int main()
{
    
    
	int T;
	while(scanf("%d",&T) != EOF)
	{
    
    
		int temp;
		int n;
		scanf("%d",&n);
		node arr[100007];
		for(int i = 0; i < n; i++)
		{
    
    
			scanf("%d%d",&arr[i].x,&arr[i].y);
			arr[i].num = i+1;
		}
		for(int i = n-1; i > 0; i--)
		{
    
    
			for(int j = i-1; j >= 0; j--)
			{
    
    
				if((arr[i].x > arr[j].x) && (arr[i].y > 0))
				{
    
    
					arr[i].y--;
						
					temp = arr[i].x;
					arr[i].x = arr[j].x;
					arr[j].x = temp;
			
					temp = arr[i].y;
					arr[i].y = arr[j].y;
					arr[j].y = temp;	
			
					temp = arr[i].num;
					arr[i].num = arr[j].num;
					arr[j].num = temp;					
				}
			}
		}
		for(int j = 0; j < n; j++)
		{
    
    
			printf("%d ",arr[j].num);
		}		
	}
	return 0;
}

本题感悟

本块内容可能来自课本或其他网站,若涉及侵权问题,请联系我进行删除,谢谢大家啦~

思路:我写错了TAT,虽然我不知道错在哪了,Time Limit Exceed,权当记录,总有一天我会写出来的!!!

以上。

猜你喜欢

转载自blog.csdn.net/hongguoya/article/details/106415446