POJ - 3244-Difference between Triplets
其实我最开始没有这道题。。。是做到UPC-11079-小P的决斗,训练结束后然后搜索了一波,才了解这个题的。
非常牛逼的题。。。这么多人做出来了。。。我好菜。。。
对于每对三元组Ta=(La,Ja,Ka),Tb=(Lb,Jb,Kb),定义Ta,Tb之间的差值D为D(Ta,Tb)=max(La−Lb,Ja−Jb,Ka−Kb)−min(La−Lb,Ja−Jb,Ka−Kb),
给多个三元组,求两两之间差值之和。
给出一个转化 max,min与绝对值之间的转化:
max(a,b,c)-min(a,b,c)=(|a-b|+|b-c|+|c-a|)/2
证明这个式子:给定一个递增的序列,a1,a2,a3,a4...an
max(a1,a2,a3...an)-min(a1,a2,a3...an)
=1/2(an-a1+an-a1)=an-an-1+an-1-an-2....-a2+a2-a1+an-a1
=1/2(|an-an-1|+|an-1-an-2|+...+|a2-a1|+|a1-an|)
这玩意是严重对称的。。。然后。。。我也不是很清楚了
知道这个性质以后,我们考虑一个叫贡献的东西,首先肯定把
a=xi-yi b=yi-zi c=zi-xi 保存下来。
首先绝对值是非常讨厌的,我们通过排序去掉了绝对值。
然后我们考虑这样一个东西,当前是i位置,那么前面的都是比我小的,所以再对于前面i-1匹配时,a[i]做的是被减数,因此a[i]*(i-1)
对于后面n-i-1个数,我们发现它是做减数,那么贡献其实是-(n-i)*a[i],所以单点贡献是a[i]*(i-1)-(n-i)*a[i],对与其他的也是一样的。
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#define LL long long
using namespace std;
const int maxx = ;
LL L[maxx];
LL J[maxx];
LL K[maxx];
LL a[maxx];
LL b[maxx];
LL c[maxx];
int main(){
int n;
while(~scanf("%d",&n)&&n){ for (int i=;i<=n;i++){
scanf("%lld%lld%lld",&L[i],&J[i],&K[i]);
a[i]=L[i]-J[i];
b[i]=J[i]-K[i];
c[i]=K[i]-L[i];
}
sort(a+,a++n);
sort(b+,b++n);
sort(c+,c++n);
LL ans=;
for (int i=;i<=n;i++){
ans+=a[i]*(i-)-a[i]*(n-i);
ans+=b[i]*(i-)-b[i]*(n-i);
ans+=c[i]*(i-)-c[i]*(n-i);
}
printf("%lld\n",ans/);
}
return ;
}
POJ - 3244-Difference between Triplets的更多相关文章
- POJ 3419 Difference Is Beautiful(RMQ+二分 或者 模拟)
Difference Is Beautiful Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%lld & %l ...
- POJ 2253 Difference of Clustering
题意:给出一堆点,求从起点到终点的所有通路中相邻点的距离的最大值的最小值.(意思就是自己百度吧……) 解法:用相邻点的最大值作为权值代替路径的距离跑最短路或者最小生成树.然后我写了一个我以为是优化过的 ...
- POJ 3419 Difference Is Beautiful(RMQ变形)
题意:N个数,M个询问,每个询问为一个区间,求区间最长连续子序列,要求每个数都不同(perfect sequence,简称PS). 题解:很容易求出以每个数为结尾的ps,也就是求区间的最大值.有一个不 ...
- POJ 3419 Difference Is Beautiful
先处理出每一个i位置向左最远能到达的位置L[i].每一次询问,要找到L,R区间中的p位置,p位置左边的L[i]都是小于L的,p位置开始,到R位置,L[i]都大于等于L,对于前者,最大值为p-L,后者求 ...
- POJ 3419 Difference Is Beautiful (DP + 二分 + rmq)
题意:给n个数(n<=200000),每个数的绝对值不超过(10^6),有m个查询(m<=200000),每次查询区间[a,b]中连续的没有相同数的的最大长度. 析:由于n太大,无法暴力, ...
- ACM数学
1.burnside定理,polya计数法 这个专题我单独写了个小结,大家可以简单参考一下:polya 计数法,burnside定理小结 2.置换,置换的运算 置换的概念还是比较好理解的,< ...
- [转] POJ数学问题
转自:http://blog.sina.com.cn/s/blog_6635898a0100magq.html 1.burnside定理,polya计数法 这个大家可以看brudildi的<组合 ...
- acm数学(转)
这个东西先放在这吧.做过的以后会用#号标示出来 1.burnside定理,polya计数法 这个大家可以看brudildi的<组合数学>,那本书的这一章写的很详细也很容易理解.最好能 ...
- poj3244(公式题)
Difference between Triplets Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2476 Acce ...
- POJ 2718 Smallest Difference(最小差)
Smallest Difference(最小差) Time Limit: 1000MS Memory Limit: 65536K Description - 题目描述 Given a numb ...
随机推荐
- hive笔记:复杂数据类型-array结构
array 结构 (1)语法:array(val1,val2,val3,…) 操作类型:array array类型的数据可以通过'数组名[index]'的方式访问,index从0开始: (2)建表: ...
- emacs 绑定快捷键 c/c++
;;跳转到函数定义的地方 (global-set-key (kbd "C-<f2>") 'ggtags-find-definition) ; Control+F2 ;; ...
- 【转】10条你不可不知的css规则
10条你不可不知的css规则 Posted on 2006-12-20 10:33 雨中太阳 阅读(343) 评论(1) 编辑 收藏 :[译]10条你不可不知的css规则正文: Published D ...
- 【大数据技术】Flink
“下一代大数据处理引擎王者” Apache Flink 它既能保证数据一致性“Exactly Once",又能实时快速的处理海量数据.与生俱来的 Watermark 功能让它能对复杂数据乱序 ...
- 前端使用node.js+express+mockjs+mysql实现简单服务端,2种方式模拟数据返回
今天,我教大家来搭建一个简单服务端 参考文章: https://www.jianshu.com/p/cb89d9ac635e https://www.cnblogs.com/jj-notes/p/66 ...
- postgreSQL 应用case when的例子
selectname,md5(indvl_id_nbr) as indvl_id_nbr,case when char_length(indvl_id_nbr)=18 or char_length(i ...
- cookie 处理 以及模拟登陆
cookie的处理 1.手动处理: cookie封装到headers 2.自动处理: 1.获取一个session对象 2.使用session对象进行请求的发送 3.作用:在使用session进行请求发 ...
- 使用c#封装海康SDK出现无法加载 DLL“..\bin\HCNetSDK.dll”: 找不到指定的模块
最近在研究网络摄像头的二次开发,测试了一款海康威视的网络摄像头,程序调试的时候,出现如题的报错. 调试随机自带的demo时,程序运行正常,但当把该程序引入到我自己的程序中时,就开始报错.根据开发软件包 ...
- xss攻击(跨站脚本)
原理跨站脚本(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”. 我们常常听到“注入”(Injection),如SQL注入 ...
- CSAPP:第三章程序的机器级表示1
CSAPP:程序的机器级表示1 关键点:数据格式.操作数指示符. 数据格式访问信息操作数指示符举例说明 数据格式 术语字(word)表示16位数据类型,32位数为双字(double words), ...