JZOJ.5288【NOIP2017模拟8.17】球场大佬
Description
每四个人的总能力值的定义是:任意选两个与另两个PK,能力值的贡献是较高的一组减去较低的一组。比如能力值为5和7的去PK 6和10的差值,那么用较高的减去较低的就是6+10-5-7=4。然后四个人的总能力值要任意两两之间与其他两个的总贡献。如(a,b,c,d)四个人,那么他们的总能力值就是(a,b)一组与(c,d)一组PK,(a,c)一组与(b,d)一组PK,(a,d)一组与(b,c)一组PK,(b,c)一组与(a,d)一组PK,(b,d)一组与(a,c)一组PK,(c,d)一组与(a,b)一组PK这六项PK差值就是四个人的总能力值。
现在,古猴想知道这个场任意四个人的总能力值的和是多少,但是急着要拿拍,你需要马上告诉他这个场的情况?
Input
Output
Sample Input
3
4
1 2 3 3
5
1 2 3 4 5
6
9 18 28 23 12 9
Sample Output
10
76
1176
Data Constraint
对于另外20%的数据n≤200,T≤10
对于另外50%的数据n≤2000,T≤100
保证所有的n加起来不超过2000
题目就是求$\begin{align}\sum_{i=1}^n\sum_{j=i+1}^n\sum_{k=j+1}^n\sum_{l=k+1}^n&|(a_i+a_j)-(a_k+a_l)|+|(a_i+a_k)-(a_j+a_l)|\\+&|(a_i+a_l)-(a_j+a_k)|+|(a_j+a_k)-(a_i+a_l)|\\+&|(a_j+a_l)-(a_i+a_k)|+|(a_k+a_l)-(a_i+a_j)|\end{align}$
朴素的O(n4)显然过不了,我们得考虑一下优化下。
观察公式我们发现它是两两配对进行相减,我们可以尝试将a[i]+a[j]两两配对储存在数组b里,然后计算每对对答案的贡献。
绝对值不好处理, 我们可以尝试去掉绝对值,那么我们就得确定该结果的正负。我们将b数组从大到小排序,发现对于一个bi,它会被减去(i-1)次,加上(nn-i)次(其中nn为b数组里数的个数)
但是我们会发现有个问题,就是有可能会选到具有同一个数的bi,bj,比如bi=ax+ay,但bj=ax+az,这是不合法的情况,因为三个人不符题目要求,我们就要将这一些去掉。
对于一个bi,它是由ax+ay得到的,其中ax>ay,我们考虑bj=ax+az,其中假设bi>bj,那么ay>az,对于这些的az+ax=bj都是不合法的,那么一共就有rank[ay]-1个。(rank[i]表示i的排名)
再对于bk=as+ay,假设bi>bk,那么ax>as,对于这些就有rank[ax]-2个(除去它本身和ay)
bi<bj bi<bk同样的道理也可以得到(n-rank[ay]-1)个和(n-rank[ax])个
这样我们就可以把重复的去掉就可以了。
复杂度O(n2+nlogn2)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 2002000
#define mo 1000000007
using namespace std;
int a[],t;
long long ans,n,len;
struct data{
long long x,y,v;
}b[N];
bool comp(const struct data a,const struct data b){
return a.v>b.v;
}
int main(){
scanf("%d",&t);
while (t--){
scanf("%lld",&n);
ans=;
for (int i=;i<=n;i++)
scanf("%d",&a[i]);
sort(a+,a++n);
len=;
for (int i=;i<=n;i++)
for (int j=i+;j<=n;j++)
b[++len].v=a[j]+a[i],b[len].x=i,b[len].y=j;
sort(b+,b++len,comp);
for (long long i=;i<=len;i++)
ans=(b[i].v%mo*(len-i-(b[i].x-+b[i].y-))%mo-b[i].v%mo*(i--(n-b[i].x-+n-b[i].y))%mo+ans+mo)%mo;
printf("%lld\n",ans*%mo);
}
}
神奇的代码
这道题就是通过拆散式子把相等的式子一起加起来从而降低了复杂度。
JZOJ.5288【NOIP2017模拟8.17】球场大佬的更多相关文章
- JZOJ.5289【NOIP2017模拟8.17】偷笑
Description berber走进机房,边敲门边喊:“我是哔哔”CRAZY转过头:“我警告你,哔哔刚刚来过!”“呵呵呵呵……”这时,哔哔站了起来,环顾四周:“你们笑什么?……”巧了,发出笑声的人 ...
- [jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)
题目链接: http://172.16.0.132/senior/#main/show/5343 题目: 题解: 记旋转i次之后的答案为$ans_i$,分别考虑每个元素对ans数组的贡献 若$s_i& ...
- 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
[NOIP2017提高A组模拟9.17]信仰是为了虚无之人 Description Input Output Sample Input 3 3 0 1 1 7 1 1 6 1 3 2 Sample O ...
- 【NOIP2017提高A组模拟9.17】猫
[NOIP2017提高A组模拟9.17]猫 题目 Description 信息组最近猫成灾了! 隔壁物理组也拿猫没办法. 信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数) ...
- 【NOIP2017提高A组模拟9.17】组合数问题
[NOIP2017提高A组模拟9.17]组合数问题 题目 Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数. 举个例子,将{1,2,3}拆分成2 个 ...
- JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠
JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...
- JZOJ 5246. 【NOIP2017模拟8.8A组】Trip(trip)
5246. [NOIP2017模拟8.8A组]Trip(trip) (File IO): input:trip.in output:trip.out Time Limits: 1500 ms Memo ...
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
5235. [NOIP2017模拟8.7A组]好的排列 (File IO): input:permutation.in output:permutation.out Time Limits: 1000 ...
- JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨
5236. [NOIP2017模拟8.7A组]利普希茨 (File IO): input:lipschitz.in output:lipschitz.out Time Limits: 1000 ms ...
随机推荐
- EMQ学习---客户链接资源消耗
Erlang进程消耗EMQ对客户端链接使用链接进程(emqtt_client)和session进程(emqtt_session)分开的策略. 当一个mqtt的客户端连接到EMQ的服务器上的时候,首先会 ...
- Centos 7 防火墙
systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体.启动一个服务:systemctl start firewalld.service ...
- UE初写小项目问题之命令行报错:Expected indentation of 4 spaces but found 6
一.问题 刚开始用一个小项目练手,用vue-cli初始化项目,直接安装了所有的东西,如vue-router.ESLint.unit tests等等,当时只懂得vue-router是什么. 问题来了,在 ...
- 以源码编译的方式安装PHP与php-fpm
首先是最基本的下载,解压,编译安装(以PHP 5.3.6 为例): wget http://www.php.net/get/php-5.3.6.tar.gz/from/this/mirrortar x ...
- 重装windows导致grub损坏
本人一块磁盘第7分区装linux,第一分区先装xp,后重装为windows8.1后,发现grub引导没了,直接进了windows,解决办法如下: 1.LiveCD进入系统,打开shell 2.输入sh ...
- centos系统字符编码问题
1.cat /etc/locale.conf LANG="en_US.UTF-8" 2./etc/profile.d/lang.sh这个文件要有且可以正常执行(检查/sbin/co ...
- vue-router介绍
vue-router学习 转自:https://my.oschina.net/u/1416844/blog/849971 1. vue-router介绍 vue-router把react-router ...
- iPhone4 降级6.12教程 无须SHSH 不装插件 不睡死[转载] by 轻鸢
无shsh降级电脑系统,细节操作等其它影响因素较多,不确保每个人都能成功,楼主发帖前刷机几十次均成功.步骤有些繁琐,按照步骤每一步都正确可保证最后不睡死 注意一下,无SHSH降级都是不完美的,开机需要 ...
- 应有dataGridView控件
using System.Data.SqlClient; namespace UseDataGridView { public partial class Form1 : Form { public ...
- SpringBoot DataSource 配置说明
DataSource 配置说明 属性 说明 spring.dao.exceptiontranslation.enabled 是否开启PersistenceExceptionTranslationPos ...