60分 用了归并 为什么还是超时了呀?求大佬解答
查看原帖
60分 用了归并 为什么还是超时了呀?求大佬解答
1024853
sana_37楼主2023/7/30 16:09
#include<iostream>
using namespace std;
typedef struct Node
{
    int number;
    long long  score;
    long long  power;
};
void Sortarray(Node* arr, Node* brr,int l,int r)
{
	if (l >= r)return;
	int middle = (r - l) / 2 + l;
	int p = l; int q = middle+1;
	int index = 0;
	while (p<=middle && q <=r)
	{
		if (arr[p].score != arr[q].score)
		{
			if (arr[p].score > arr[q].score)
			{
				brr[index++] = arr[p];
				p++;
			}
			else
			{
				brr[index++]=arr[q];
				q++;
			}
		}
		else
		{
			if (arr[p].number < arr[q].number)
			{
				brr[index++] = arr[p];
				p++;
			}
			else
			{
				brr[index++] = arr[q];
				q++;
			}
		}
	}
	while (p <=middle)
	{
		brr[index++] = arr[p];
		p++;
	}
	while (q <=r)
	{
		brr[index++] = arr[q];
		q++;
	}
	for (int i = 0; i < index; i++)
	{
		arr[l+i].number = brr[i].number;
		arr[l+i].power = brr[i].power;
		arr[l+i].score = brr[i].score;
	}
	
	return;

}
void _sort_arr(Node* arr, Node* temp, int l, int r)
{
	if (l >= r)return;
	int mid = (r - l) / 2 + l;
	_sort_arr(arr, temp, l, mid);
	_sort_arr(arr, temp, mid+1, r);

	Sortarray(arr, temp, l, r);

}
int main()
{
	int N, R, Q;
	cin >> N >> R >> Q;
	Node* arr = new Node[2 * N];
	Node* brr = new Node[2 * N];

	for (int i = 0; i < 2 * N; i++)
	{
		arr[i].number = i + 1;
		cin >> arr[i].score;
	}
	for (int i = 0; i < 2 * N; i++)
	{
		cin >> arr[i].power;
	}
	while (R--)
	{
	
		_sort_arr(arr, brr, 0, N*2-1);
		
		for (int i = 0; i < 2 * N; i += 2)
		{
			if (arr[i].power > arr[i + 1].power)
			{
				arr[i].score++;
			}
			else
			{
				arr[i + 1].score++;
			}
		}
	}
	_sort_arr(arr, brr, 0, N * 2 - 1);
	
	cout << arr[Q - 1].number << endl;



	return 0;
}

2023/7/30 16:09
加载中...