写不出题就求助的屑
  • 板块灌水区
  • 楼主OceanBrawl
  • 当前回复10
  • 已保存回复10
  • 发布时间2022/1/21 18:16
  • 上次更新2023/10/28 11:38:41
查看原帖
写不出题就求助的屑
567034
OceanBrawl楼主2022/1/21 18:16

一条公路(假定为一条直线)旁有n个村庄,每个村庄的坐标xi各不相同。每个村庄里的人喜欢给其他村庄的人写信,邮费恰好就是村庄之间的距离。现在要求出每个村庄里的人要寄信的最低邮费和最高邮费。

第一行为正整数t(≤5),表示数据组数;每组数据中,第一行为正整数n(≤105),表示村庄数;第二行为以空格隔开的n个整数ai(|ai|≤109),表示每个村庄的坐标。

对于每组数据,输出n行,每行两个正整数,分别表示第i个村庄寄信的最低和最高邮费。

输入样例:

2

4

-5 -2 2 7

2

-1 1

输出样例:

3 12

3 9

4 7

5 12

2 2

2 2

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ewen_ak_ioi return 0;
using namespace std;
ll in(){
	char c = getchar();
	int x = 0, f = 1;
	for (; c < '0' || c > '9'; c = getchar())
		if (c == '-') f = -1;
	for (; c >= '0' && c <= '9'; c = getchar())
		x = (x << 1) + (x << 3) + (c ^ 48);
	return x * f;
}
void put(int x){
	if (x < 0) x = -x, putchar('-');
	if (x > 9) put(x / 10);
	putchar(x % 10 + '0');
}
int a[100005];
int main()
{
    freopen("mail.in","r",stdin);
    freopen("mail.out","w",stdout);
    int t;scanf("%d",&t);
    while(t--)
    {
        int n;scanf("%d",&n);
        for(int i=0;i<n;i++)a[i]=in();
        sort(a,a+n);
        printf("%d %d\n",a[1]-a[0],a[n-1]-a[0]);
        for(int i=1;i<n-1;i++)
        {
            if(a[i+1]-a[i]>a[i]-a[i-1])printf("%d ",a[i]-a[i-1]);
            else printf("%d ",a[i+1]-a[i]);
            if(a[n-1]-a[i]>a[i]-a[0])printf("%d\n",a[n-1]-a[i]);
            else printf("%d\n",a[i]-a[0]);
        }
        printf("%d %d\n",a[n-1]-a[n-2],a[n-1]-a[0]);
    }
    ewen_ak_ioi
}

我代码

求助

2022/1/21 18:16
加载中...