MnZn 朴素排序代码求调
查看原帖
MnZn 朴素排序代码求调
770910
ice_fish01楼主2023/9/21 23:44

Rt\text {Rt},朴素排序代码

思路说明(同第一篇题解)

根据每天的值排序,然后它左右最近的数一定是和它的值相差最小的。

于是在左右都看看,如果天数比它的天数小就满足题意所以直接算到答案里去。

问题说明

WA 3 个测试点,RE 1 个测试点。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e7 + 10;
struct node{
	int day,y;
}a[maxn];
int n,sum = 0;
bool cmp(node x,node z)
{
	return x.y <= z.y;
}
int main()
{
	ios::sync_with_stdio(false);
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i].y;
		a[i].day = i;
	}
	sort(a+1,a+n+1,cmp);
	for(int i = 1;i <= n;i++)
	{
		if(a[i].day == 1)
		{
			sum += a[i].y; continue;
		}
		int m = 114514;
		for(int j = i - 1;j >= 1;j--)
		{
			if(a[j].day >= a[i].day)
				continue;
			m = abs(a[j].y - a[i].y); break;
		}
		for(int j = i + 1;j <= n;j++)
		{
			if(a[j].day >= a[i].day)
				continue;
			m = min(m,abs(a[j].y - a[i].y)); break;
		}
		sum += m;
	}
	cout << sum;
	return 0;
}

2023/9/21 23:44
加载中...