ccfcsp 2017年 二题 学生排队

题意:

常见的学生排队,点到学号的向后几个人,向前几个人。

思路:

我的思路简直,我给你们讲,我用数组下标当人,数组里面存的数字为这个人的位置。。这道题算水过去的。哈哈…………

代码:

#include 
#include 

using namespace std;
int n, m;
int p[1001];
int main()
{
     
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; i++)
		p[i] = i;
	while (m--)
	{
     
		int a, b;
		scanf("%d%d", &a, &b);
		if (b > 0)//向后移动
		{
     
			int pp = p[a] + b;
			for (int i = 1; i <= n; i++)
			{
     
				if ( p[a] < p[i] && p[i] <= pp)
				{
     
					p[i]--;
				}
			}
			p[a] += b;
		}
		else if (b < 0)//向前移动
		{
     
			int pp = p[a] + b;
			for (int i = 1; i <= n; i++)
			{
     
				if (pp <= p[i] && p[i] < p[a])
				{
     
					p[i]++;
				}
			}
			p[a] += b;
		}
	}

	int j = 1;
	int k = n;
	while (k --)
		for (int i = 1; i <= n; i++)
		{
     
			if (p[i] == j)
			{
     
				cout << i << " ";
				j++;
				break;
			}
		}
	return 0;
}

看着不靠谱,但是还是拿到分了
ccfcsp 2017年 二题 学生排队_第1张图片

你可能感兴趣的:(ccf,c++,算法)