时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format:%lld
题目描述
输入描述:
输入描述
第一行一个整数表示n. 接下来n行每行两个整数x,y表示一个点.
输出描述:
输出一个整数表示周长和.
示例1
输入
3
0 0
1 0
1 1
输出
4
备注:
3≤n≤1e3
−1e9≤x,y≤1e9
题解:
又到了找规律的时间:
n个点构成C3n个三角形,注意由没有三点共线,说明任意三个点都可以构成三角形
比如有n个点,现将每两点之间的马哈顿距离算出来,并求出总值sum。
然后构建三角形,选取两个点A和B,那第三个点就可以从剩下(n-2)个点里找,也就是有(n-2)个选择 ,那A与B之间的这个边就被用了(n-2)次,然后另外两个点,再这样操作。你会发现每个边都被用了(n-2)次
所以最后结果就是sum*(n-2)
千万不要忘了 mod
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
ll a[1004];
ll b[1004];
ll w(ll x1,ll y1,ll x2,ll y2)
{
return abs(x2-x1)+abs(y2-y1);
}
int main()
{
int n;
ll sum=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
sum=(sum+w(a[i],b[i],a[j],b[j]))%mod;
}
}
cout<<sum*(n-2)%mod;
return 0;
}