Comet OJ 三元组 推导+两个指针+分类讨论
题目: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 三元组 推导+两个指针+分类讨论的更多相关文章
- Comet OJ - Contest #11 题解&赛后总结
Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...
- Comet OJ 2019 夏季欢乐赛题解
Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...
- Comet OJ - Contest #2 简要题解
Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...
- Comet OJ - Contest #2简要题解
Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/ ...
- Comet OJ CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)
Preface 在一个月黑风高的夜晚我这个蒟蒻正踌躇着打什么比赛好 是继续做一场AGC,还是去刷一场CF 然后,一道金光闪过(滑稽),我们的红太阳bzt给我指明了方向: 你太菜了,我知道有一场很水的比 ...
- Comet OJ 计算机(computer)
Comet OJ 计算机(computer) 题目传送门 题目描述 小 X 有一台奇怪的计算机. 这台计算机首先会读入一个正整数 nn,然后生成一个包含 nn 个数的序列 aa. 一开始 a_i(1 ...
- Comet OJ - Contest #13-C2
Comet OJ - Contest #13-C2 C2-佛御石之钵 -不碎的意志-」(困难版) 又是一道并查集.最近做过的并查集的题貌似蛮多的. 思路 首先考虑,每次处理矩形只考虑从0变成1的点.这 ...
- Comet OJ 夏季欢乐赛 分配学号
Comet OJ 夏季欢乐赛 H 分配学号 题目传送门 题目描述 今天,是JWJU给同学们分配学号的一天!为了让大家尽可能的得到自己想要的学号,鸡尾酒让大家先从 [1,10^{18}][1,1018] ...
- Comet OJ - Contest #13 「佛御石之钵 -不碎的意志-」(hard)
来源:Comet OJ - Contest #13 一眼并查集,然后发现这题 tmd 要卡常数的说卧槽... 发现这里又要用并查集跳过访问点,又要用并查集维护联通块,于是开俩并查集分别维护就好了 一开 ...
随机推荐
- UOJ 418 【集训队作业2018】三角形——思路+线段树合并
题目:http://uoj.ac/problem/418 看了题解才会…… 很好的想法是把整个过程看成若干 “取一点 i ,值+=w[ i ],值-=\(\sum w[j]\)”(其中 j 是 i 的 ...
- 27 October in ss
Contest A. chrono 计算某年的干支纪年法年份. Too easy. 然而我忘记 C++ 取模运算是向0取整.然而数据太水,还是有 90 分. B. clock 计算某时刻时针和分针的夹 ...
- Apache: No space left on device: Couldn’t create rewrite_map(XXXX)
启动apache的时候 有时候会遇到这样的错误:No space left on device: Couldn’t create rewrite_map(XXXX) 第一眼看以为是磁盘没有空间了,其实 ...
- appium定位学习
前面也介绍过appium的一些定位方法,今天看到一篇博客,里面的方法总结的,就转载过来. 本文转自:https://www.cnblogs.com/Mushishi_xu/p/7685966.html ...
- 建站手册-浏览器信息:挪威的 Opera 浏览器
ylbtech-建站手册-浏览器信息:挪威的 Opera 浏览器 1.返回顶部 1. http://www.w3school.com.cn/browsers/browsers_opera.asp 2. ...
- ccf 201809-3 元素选择器
一.思路: 1.将结构化文档的每一行处理成一个节点(可定义一个结构体,成员包含标签tag.属性id.层级level.祖先所在行数father). 2.然后整个结构化文档就成了一个树形结构,可从任一节点 ...
- Cocos2d-x之Sound
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 音效简介: 1.1 在游戏开发的过程中除了华丽的界面,生动的动画之外,适当的音效也是重要的一部分 1.2 游戏中的声音分为两类,一类是音乐 ...
- CSS深入理解line-height
1.line-height高度基于基线 2. 3.p元素的高度由行高决定的 4. 5.
- 如何访问 Redis 中的海量数据,服务才不会挂掉?
来源:www.toutiao.com/i6697540366528152077 一.前言 有时候我们需要知道线上的Redis的使用情况,尤其需要知道一些前缀的key值,让我们怎么去查看呢?并且通常情况 ...
- 前后端读写同一个cookie 搞不定,搞不定
后端php 前端js ------------------ ------- 前后端一起操作容易出现 .xxx.com,domain前面多了个点,在nginx上配置,也去不了,nginx报错 prox ...