poj 3244 Difference between Triplets——数学
2011-09-14 15:24
357 查看
这个题完全没思路……直接看的解题报告。。居然就这么打刷进第一页了。。
定义两个三元组I(xi,yi,zi)和J(xj,yj,zj),(可以看做是空间中的点) 他们的距离为D(I,J)=max{xi-xj,yi-yj,zi-zj}-min{xi-xj,yi-yj,zi-zj}, 给定n个三元组(n<=200000),求任意两个三元组的差的和 抽化出来的模型是 max(a,b,c)-min(a,b,c),这个东西吧他放在数轴上 a,b,c 我们要求最大和最小的差就是这三个点构成的线段的距离,那么我们这里再变通下 是不是端点到中间那个点的距离 其实画出这个图的时候,就可以看到这个距离为(|a-b|+|b-c|+|c-a|)/2,这样我们并不需要关心中间的那个 对应到题目中的原型,就是(|(xi-xj)-(yi-yj)|+|(yi-yj)-(zi-zj)|+|(zi-zj)-(xi-xj)|)/2; 对应到同一个点上就是(|(xi-yi)-(xj-yj)|+|(yi-zi)-(yj-zj)|+|(zi-xi)-(zj-xj)|)/2; 设a=(xi-yi),b=(yi-zi),c=(zi-xi),原问题等价为(|ai-aj|+|bi-bj|+|ci-cj|)/2; 然后三个可以完全分开完全独立的计算,并不影响其他两元,这里要加个优化,就是按从小到大排序出来 我们只需要算出每个位置上,他贡献了多少次加法,贡献了多少次减法即可 举个例子,目前把a的部分排序了,对于第i个,他前面的比它小,所以在和i点比较时i点贡献了i次加,对后面的n-i个点 向他们贡献了n-i次减法
a27400 | 3244 | Accepted | 2736K | 266MS | G++ | 632B | 2011-09-14 15:08:00 |
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #define MAXN 200000+10 using namespace std; int a[MAXN]; int b[MAXN]; int c[MAXN]; int main(void) { int n; while(scanf("%d",&n)&&n) { int i; for(i=1;i<=n;i++) { int p,q,r; scanf("%d %d %d",&p,&q,&r); a[i]=p-q; b[i]=q-r; c[i]=r-p; } sort(a+1,a+1+n); sort(b+1,b+1+n); sort(c+1,c+1+n); long long total=0; for(i=1;i<=n;i++) { total+=(long long)(2*i-n)*a[i];//这个地方写(2*i-n-1)也是对的,因为自己减自己是0 total+=(long long)(2*i-n)*b[i]; total+=(long long)(2*i-n)*c[i]; } printf("%lld\n",total/2); } }
相关文章推荐
- (Relax 数论1.19)POJ 3244 Difference between Triplets(找规律..//公式max(a,b,c)-min(a,b,c)=(|a-b|+|b-c|+|a-c)
- poj 3244 Difference between Triplets
- HDU 4715 Difference Between Primes(数学啊)
- poj 3244 Difference between Triplets 最值公式推导
- POJ 3244 - Difference between Triplets
- POJ3244-数学公式
- poj3244 Difference between Triplets
- POJ 3244 - Difference between Triplets 公式,整合运算
- POJ 3244 Difference between Triplets 公式转换
- 引用和指针的区别 Difference between pointer and reference
- Partition a set of numbers into two so that difference between their sum is minimum with equal size
- (博客搬迁)pku2231 Moo Volume(数学题http://poj.org/problem?id=2231)
- Differences between Physical Address and Virtual Address!
- Have You Ever Wondered About the Difference Between NOT NULL and DEFAULT?
- POJ-1430 Binary Stirling Numbers 组合数学
- POJ 2645 Boastin' Red Socks(组合数学)
- What is the difference between --save and --save-dev?
- What is the Differences Between Sleep/Standby and Hibernate
- The main difference between Java & C++(转载)
- The difference between Hotkey, accelerator, and composite key.