题目: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. linux 基础知识及命令总结

    1.mkdir   创建目录 -p 创建多级目录  mkdir -p /data/test -m, --mode=模式 设置权限模式(类似chmod),而不是rwxrwxrwx 减umask -p, ...

  2. c#一些操作

    C# FileStream 按大小分段读取文本内容 using System.IO; namespace FileStreamRead { class Program { static void Ma ...

  3. BeautifulSoup的用法

    BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XML中查找指定元素变得简单. ...

  4. 信息安全-攻击-XSRF:XSRF/CSRF 攻击

    ylbtech-信息安全-攻击-XSRF:XSRF/CSRF 攻击 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Ses ...

  5. 命令连接redis

    cd到redis的bin目录 ./redis-cli -h 输入info,看是否要验证 清空所有key FLUSHALL

  6. frida的js脚本处理正则的一个小坑

    frida的server模式需要python支持,所以js脚本中的正则需要多一次转义 比如匹配"/proc/{数字pid}" server: paramPath.match(&qu ...

  7. C# 生成小程序码

    /// <summary> /// B接口-微信小程序带参数二维码的生成 /// </summary> /// <param name="access_toke ...

  8. VMware虚拟机重新挂载共享目录

    经常遇到设置的共享目录在重启虚拟机后找不到的情况,于是写了个脚本:mount-shared-folders. 前提是你的虚拟机中已经安装了VMware的相关工具(一般装完虚拟机都会自动安装上的) #! ...

  9. Mybatis简介与原理

    经常面试别人或者被面试,对Mybatis简介与原理这个问题的回答千差万别,为了更好的服务与以后,来个原理介绍. 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 20 ...

  10. ---搭建springMvc框架,希望对初学者有所参考

    Spring Mvc ==> Struts2   spring 无法替代   myBatis 工作量大 要自己操作sql语句 ==> hibernate   Spring Mvc 取代St ...