题解 P1708 【天然气井】
题目传送门
思路:
首先看一眼数据范围,接着看一眼试题难度,便得出了一个看似非常粗暴,实际为正解的算法
方法:
直接把所有的天然气井的横纵坐标分别相加,然后再分别减去所有的中转站的横纵坐标即可(证明过程见尾部)
注意事项:
1.最后输出答案的时候记得取绝对值,否则会红色一片。
2.由于数据很大,一定要记得开long long,否则会WA 16 21 23 25 号点。
3.测试数据没有问题,不需要学习楼下的同志打表。
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
long long i,j,k,m,n,sumx=0,sumy=0;
scanf("%lld",&n);
for(i=1;i<=n;i++){
scanf("%lld%lld",&k,&m);
sumx+=k;
sumy+=m;
}
for(i=1;i<=n;i++){
scanf("%lld%lld",&k,&m);
sumx-=k;
sumy-=m;
}
printf("%lld",abs(sumx)+abs(sumy));
return 0;
}
证明过程:
相信大家可以很简单的想明白,由于天然气井的数量等于中转站的数量,所以对于每一座天然气站都会有一座唯一确定的中转站,而他们之间的距离就等于横纵坐标差的和,由此可证明。