题目:https://www.cometoj.com/contest/59/problem/F?problem_id=2681

题意:给你n个三元组 ai,bi,ci,如果某一对三元组满足    2*min(ai+aj,bi+bj) <= max(ai+aj,bi+bj),那么贡献+ci*cj

思路:我们可以看的出这个式子其实就是说这个的最大值要是最小值的两倍,但是我们不确定哪个大

我们就先假设

2*(ai+aj)<=  bi+bj

移项得

(2*ai-bi)+(2*aj-bj)<=0

那么我们按2*ai-bi排序

我们可以得出一个结论,如果当我们得i与j匹配时,i必定和[i+1,j]都匹配,那么我们这里就可以记录一个前缀和,那么i+1 也必定  是在[i+1,j]这个范围内找到匹配,

所以我们可以用两个指针进行查找,这是  ai+aj<=bi+bj的情况,>的时候我们只要把ai与bi交换一下就可以了

#include<bits/stdc++.h>
#define maxn 100005
#define mod 1000000007
using namespace std;
typedef long long ll;
struct sss
{
ll a,b,c;
}q[maxn];
ll num[maxn];
int n;
int cmp(struct sss x,struct sss y)
{
return (*x.a-x.b)<(*y.a-y.b);
}
ll solve(){
sort(q,q+n,cmp);
ll sum=;
int l=,r=n-;
num[]=q[].c;
for(int i=;i<n;i++) num[i]=num[i-]+q[i].c;
while(r>=){
ll t1=*q[l].a-q[l].b;
ll t2=*q[r].a-q[r].b;
if(t1+t2<=) break;
r--;
}
while(l<=r&&l<n&&r>=){
sum=(sum+(num[r]-num[l-])*q[l].c)%mod;
l++;
while(r>=){
ll t1=*q[l].a-q[l].b;
ll t2=*q[r].a-q[r].b;
if(t1+t2<=) break;
r--;
}
}
return sum;
}
int main(){
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%lld%lld%lld",&q[i].a,&q[i].b,&q[i].c);
}
ll sum=solve();
//printf("%lld\n",sum);
for(int i=;i<n;i++) swap(q[i].a,q[i].b);
sum=(sum+solve())%mod;
printf("%lld\n",sum);
}

Comet OJ 三元组 推导+两个指针+分类讨论的更多相关文章

  1. Comet OJ - Contest #11 题解&赛后总结

    Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...

  2. Comet OJ 2019 夏季欢乐赛题解

    Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...

  3. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

  4. Comet OJ - Contest #2简要题解

    Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/ ...

  5. Comet OJ CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)

    Preface 在一个月黑风高的夜晚我这个蒟蒻正踌躇着打什么比赛好 是继续做一场AGC,还是去刷一场CF 然后,一道金光闪过(滑稽),我们的红太阳bzt给我指明了方向: 你太菜了,我知道有一场很水的比 ...

  6. Comet OJ 计算机(computer)

    Comet OJ 计算机(computer) 题目传送门 题目描述 小 X 有一台奇怪的计算机. 这台计算机首先会读入一个正整数 nn,然后生成一个包含 nn 个数的序列 aa. 一开始 a_i(1 ...

  7. Comet OJ - Contest #13-C2

    Comet OJ - Contest #13-C2 C2-佛御石之钵 -不碎的意志-」(困难版) 又是一道并查集.最近做过的并查集的题貌似蛮多的. 思路 首先考虑,每次处理矩形只考虑从0变成1的点.这 ...

  8. Comet OJ 夏季欢乐赛 分配学号

    Comet OJ 夏季欢乐赛 H 分配学号 题目传送门 题目描述 今天,是JWJU给同学们分配学号的一天!为了让大家尽可能的得到自己想要的学号,鸡尾酒让大家先从 [1,10^{18}][1,1018] ...

  9. Comet OJ - Contest #13 「佛御石之钵 -不碎的意志-」(hard)

    来源:Comet OJ - Contest #13 一眼并查集,然后发现这题 tmd 要卡常数的说卧槽... 发现这里又要用并查集跳过访问点,又要用并查集维护联通块,于是开俩并查集分别维护就好了 一开 ...

随机推荐

  1. [CSP-S模拟测试]:虎(DFS+贪心)

    题目传送门(内部题15) 输入格式 第一行一个整数$n$,代表点数接下来$n-1$行,每行三个数$x,y,z$,代表点$i$与$x$之间有一条边,若$y$为$0$代表初始为白色,否则为黑色,若$z$为 ...

  2. php理解非对称SSL加密解密、验证及签名

    加密方式分为对称加密和非对称加密,对称加密只使用一个秘钥,加密和解密都使用该秘钥:非对称加密则使用一对秘钥,使用公钥加密,私钥解密. 需要通过原生的openssl_public_encrypt加密,o ...

  3. docker镜像加速遇见的一个问题

    今天运行docker发现了一个问题,运行docker images会报 Cannot connect to the Docker daemon at unix:///var/run/docker.so ...

  4. 专家揭秘:STM32启动过程全解

    电子发烧友网核心提示:本文主要阐述了STM32启动过程全面解析,包括启动过程的介绍.启动代码的陈列以及深入解析. 相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方 ...

  5. drf基础

    1.什么是编程? 数据结构和算法的结合 2.什么是REST? 同一个功能会产生五花八门的url(把查看单条记录和查看多条记录都看成是一个功能),而且响应回去的数据也没有同一的格式规范,这就造成了前后端 ...

  6. do_mmap解读

    1: unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, 2: unsigned long len, unsigned ...

  7. XGBoost的推导和说明

    一.简介 XGBoost是“Extreme Gradient Boosting”的缩写,其中“Gradient Boosting”一词在论文Greedy Function Approximation: ...

  8. python-orm操作数据库

    ORM 模型 ORM概念 对象关系映射 全称(Object Relational Mapping) 简称ORM 模式是一种为了解决面向对象与关系型数据库存在的互不匹配的现象的技术. 简单来说, ORM ...

  9. 【题解】图的m着色问题

    题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的m着色问题是对于给定图G和m ...

  10. jq实现两个input输入同时不为空时,改变确认框背景颜色

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...