上海2022年10月月赛丙组 T5:组队竞赛
原题连接:上海市计算机学会竞赛平台 | YACS
一,70分的写法
先对能力值进行从小到大排序,在对热情度进行前缀和处理,再枚举区间中的开始与结束位置判断是否满足能力值最大选手的能力差值小于等于X的条件,如果满足则利用前面的前缀和使ans = ans和[i,j]区间内的热情度之和取最大值 ,最后输出ans即可。
时间复杂度:O(N^2)
代码:
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
using namespace std;
struct xs
{long long a,b;
} s[1000001];
long long n,ans,x;
bool cmp(xs a1,xs a2)
{return a1.a < a2.a;
}
int main()
{scanf("%lld",&n);for(int i = 1; i <= n; i++) scanf("%lld%lld",&s[i].a,&s[i].b);scanf("%lld",&x);sort(s + 1,s + 1 + n,cmp);//按能力值从小到大排序 for(int i = 2; i <= n; i++) s[i].b += s[i - 1].b;//为了等下可以O(1)求出[i,j]区间内的热情度之和 for(int i = 1; i <= n; i++)//枚举区间中的起始位置 {if(ans > s[n].b - s[i - 1].b) break;//如果目前的答案>[i - 1,n]区间内的热情之和,说明后续的枚举是没有意义的,永远不会超过ans,跳出循环 for(int j = i + 1; j <= n; j++)//枚举区间中的结束位置if(s[j].a - s[i].a <= x)//满足条件 {if((s[j].b - s[i - 1].b) > ans)//ans和[i,j]区间内的热情度之和取最大值 ans = s[j].b - s[i - 1].b;}else break;//如果不满足条件,那么后续枚举结束位置的操作只会增加[i - 1,n]区间内的热情之和的值,所以直接跳出循环 }printf("%lld",ans);return 0;
}
二,100分
用二分查找来查找结束位置
时间复杂度:O(log n)
代码:
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
using namespace std;
struct xs
{long long a,b;
} s[1000001];
long long n,ans,x;
bool cmp(xs a1,xs a2)
{return a1.a < a2.a;
}
int main()
{scanf("%lld",&n);for(int i = 1; i <= n; i++) scanf("%lld%lld",&s[i].a,&s[i].b);scanf("%lld",&x);sort(s + 1,s + 1 + n,cmp);//按能力值从小到大排序for(int i = 2; i <= n; i++) s[i].b += s[i - 1].b;//为了等下可以O(1)求出[i,j]区间内的热情度之和for(int i = 1; i <= n; i++)//枚举区间中的起始位置{if(ans > s[n].b - s[i - 1].b) break;//如果目前的答案>[i - 1,n]区间内的热情之和,说明后续的枚举是没有意义的,永远不会超过ans,跳出循环int left = i + 1,right = n;while(left <= right){int mid = (left + right) / 2;if(s[mid].a - s[i].a > x) right = mid - 1;else left = mid + 1;}ans = max(ans,s[right + left >> 1].b - s[i - 1].b);}printf("%lld",ans);return 0;
}
上海2022年10月月赛丙组 T5:组队竞赛相关推荐
- 上海计算机协会-10月月赛-丙组-T5-组队竞赛
组队竞赛 内存限制: 256 Mb时间限制: 1000 ms 题目描述 有nn同学想要参加小爱组建的一支信息学竞赛队伍,每位同学有能力值a_iai与热情度b_ibi. 小爱认为,如果队伍当中,能力 ...
- 上海2022年11月月赛丙组
上海2022年11月月赛丙组 T1~T4略 T5 出栈序列 题目描述 给定一个长度为 n n n的.仅由小写字母组成的字符串,将其按序依次放入栈中. 请问在所有可能的出栈序列中,字典序最小的出栈序列是 ...
- 上海市计算机学会2022年10月月赛丙组解题报告
上海市计算机学会2022年10月月赛丙组解题报告 直角三角形的判定 题目描述 给定三个正整数表示三角形的三条边,请判定它是否为直角三角形 输入格式 第一行:三个整数 a,b 与 c 输出格式 若可以构 ...
- 上海市计算机学会月赛 2022年9月月赛丙组
上海市计算机学会月赛 2022年9月月赛丙组 这次题目真的衡水 矩形的周长与面积 机会成本 三色排序 阶乘尾数 前序中序转后序 这次题目真的衡水 文章拖了好久忘记发了 明天初赛祝各位考试顺利有一个好的 ...
- 上海市计算机学会月赛 2022年7月月赛丙组
上海市计算机学会月赛 2022年7月月赛丙组 水仙花指数 因数之和 观光电梯 匹配括号(三) 打印六芒星 本文仅供学术探讨 水仙花指数 内存限制: 256 Mb时间限制: 1000 ms 题目描述 定 ...
- ISAIR2022征稿【中国・上海, 2022年10月21-23日】
人工智能与机器人国际会议(International Symposium on ArtificialIntelligence and Robotics, ISAIR)属于人工智能与机器人交叉领域的知名 ...
- 上海市计算机学会竞赛平台.2023年1月月赛丙组
T1 实验日志 题目描述 小爱正在完成一个物理实验,为期n天,其中第i天,小爱会记录 a i a_i ai 条实验数据在实验日志中. 已知小爱的实验日志每一页最多纪录m条数据,每天做完实验后他都会将 ...
- 上海市青少年算法月赛丙组—目录汇总
上海市青少年算法2023年6月月赛(丙组) T1 差分求和 T2 二进制异或 T3 颜文字 T4 选取子段(二) T5 观光单车 上海市青少年算法2023年5月月赛(丙组) T1 三角形 ...
- 上海11月月赛乙组解题报告
上海11月月赛乙组解题报告 1.数对统计 题目描述 给定 n 个数字 a1,a2,--,an,请从中挑选两个数字,并按原顺序组成一个数对.请问能选出多少种不完全相等的数对? 输入格式 第一行,单个整数 ...
最新文章
- Java内存回收机制基础[转]
- VS2013安装OpenCV4.1版本并搭建一个小程序
- Django之ORM(多对多)
- 您如何从Python的stdin中读取信息?
- spring boot入门(九) springboot的过滤器filter。最完整、简单易懂、详细的spring boot教程。
- 语言迭代发_从今天开始,每天学点R语言~
- Python的基本语法汇总
- java 链表算法_数据结构算法Java版(一) 链表
- 经典算法——单向链表反转
- 「洛谷P3469」[POI2008]BLO-Blockade 解题报告
- 遗传算法解决作业调度c语言,应用遗传算法解决车间作业调度问题
- Postman——pre-request产生随机字符串和随机数字传给request body
- 主wifi旁零距离添加AP路由器
- 计算机组成原理唐朔飞第二版答案第六章,计算机组成原理第六章部分课后题答案(唐朔飞版)...
- CSV文件的导入和导出
- offline强化学习之Revive SDK的使用
- 工业互联网与制造控制生产网络学习总结
- SSL握手过程实例抓包分析
- 飞凌嵌入式助力智慧医疗,解析i.MX8MM在麻醉系统中的应用方案
- CSR8675学习笔记:新建一个GATT server
热门文章
- 免费API接口整理(聚合数据和API Store)
- windows绑定hosts
- 世界主要城市中英文对照表(json格式)
- 刘强东突然扔了颗重磅炸弹:京东地下胶囊物流系统取得重大突破!
- 红黄蓝绿性格在线测试软件,人的四种性格测试(红黄蓝绿)[参考].pdf
- Ackerman(阿克曼)函数C语言递归实现
- 永磁同步电机转子磁链_无轴承永磁同步电机研究现状和未来发展趋势
- 触摸屏显示无法连接到服务器,wincc flexible软件打开时提示“无法连接到SQL服务器-工业支持中心-西门子中国...
- Apollo 5.5 源码学习笔记(五) | transform模块 | Apollo中的坐标系统详解
- nodejs面试题集锦