noi.ac #30 思维
\(des\)
给定升序数组 \(A, B\)
对于任意两个集合 \(a, b\) 分别是 \(A, B\) 的子集,总价值为较小的集合的和,
总代价为 \((|a| + |b|) \times w\)
最大化的 总价值 - 总代价
\(sol\)
显然,在升序并且每个元素的代价都相同的条件下集合 \(a\) 一定是集合 \(A\) 的
某个后缀,集合 \(b\) 同理,因为代价一定的话选价值更高的结果显然更优
这样的话,枚举集合 \(A, B\) 的每个后缀作为总价值,在另一个集合中找到相应
的最后一个总价值比其大的后缀,统计答案并取更优解
\(code\)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
#define LL long long
LL A[N], B[N];
LL n, w;
LL sum1[N], sum2[N];
#define Rep(i, a, b) for(int i = a; i <= b; i ++)
int main() {
cin >> n >> w;
Rep(i, 1, n) cin >> A[i];
Rep(i, 1, n) cin >> B[i];
reverse(A + 1, A + n + 1);
reverse(B + 1, B + n + 1);
Rep(i, 1, n) sum1[i] = sum1[i - 1] + A[i];
Rep(i, 1, n) sum2[i] = sum2[i - 1] + B[i];
LL Answer = 0;
int to = 0;
Rep(i, 1, n) {
while(to != n && sum2[to] < sum1[i]) to ++;
if(sum1[i] > sum2[to]) break;
Answer = max(Answer, sum1[i] - w * (i + to));
}
to = 0;
Rep(i, 1, n) {
while(to != n && sum1[to] < sum2[i]) to ++;
if(sum2[i] > sum1[to]) break;
Answer = max(Answer, sum2[i] - w * (i + to));
}
cout << Answer;
return 0;
}
noi.ac #30 思维的更多相关文章
- [NOI.AC#30]candy 贪心
链接 一个直观的想法是,枚举最小的是谁,然后二分找到另外一个序列对应位置更新答案,复杂度 \(O(NlogN)\) 实际上不需要二分,因为每次当最大的变大之后,原来不行的最小值现在也一定不行,指针移动 ...
- NOI.AC 32 Sort——分治
题目:http://noi.ac/problem/32 从全是0和1的情况入手,可以像线段树一样分治下去,回到本层的时候就是左半部的右边是1,右半部的左边是0,把这两部分换一下就行.代价和时间一样是n ...
- # NOI.AC省选赛 第五场T1 子集,与&最大值
NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...
- NOI.ac #31 MST DP、哈希
题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...
- NOI.AC NOIP模拟赛 第五场 游记
NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- NOI.AC NOIP模拟赛 第二场 补记
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...
- NOI.AC NOIP模拟赛 第一场 补记
NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...
- NOI.AC NOIP模拟赛 第四场 补记
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...
随机推荐
- [洛谷P5329][SNOI2019]字符串
题目大意:给一个长度为$n$的字符串$s$,字符串$p_i$为字符串$s$去掉第$i$个字符后形成的字符串.请给所有字符串$p_i$排序(相同字符串按编号排序) 题解:先去掉所有连续相同字符,因为它们 ...
- LOJ2026 JLOI/SHOI2016 成绩比较 组合、容斥
传送门 感觉自己越来越愚钝了qwq 先考虑从\(n-1\)个人里安排恰好\(k\)个人被碾压,然后再考虑如何分配分数,两者乘起来得到答案. 对于第一部分,可以考虑容斥:设\(f_i\)表示\(i\)个 ...
- vue 项目之后生成的 dist 文件该怎么在本地启动运行
简单高效 npm i -g servecd distserve
- Linux 用户管理命令笔记
1.新增用户 useradd user1 用户创建流程 1.系统先将用户信息记录在/etc/passwd中,一般会在/etc/passwd和/etc/shadow末尾,同时分配该用户UID. 2.创建 ...
- Java中BIO和NIO
同步/异步.阻塞/非阻塞概念 同步异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication) 同步:在发出一个 ...
- kubernetes第二章--集群搭建
- 【转载】Javascript使用Math.random()随机数函数生成1至1000的随机数
在Javascript代码编写过程中,有时候我们需要使用Js来生成随机数,清除ajax的get请求缓存的时候我们会带上一个随机数来解决此问题,此外在其他应用中也可能使用到随机数,在Javascript ...
- python 标准库subprocess
作者:Vamei 出处:http://www.cnblogs.com/vamei subprocess包主要功能是执行外部的命令和程序.subprocess的功能与shell类似.subprocess ...
- OC与swift混编 #import "项目名-Swift.h"失效问题
由于项目多个环境部署,每次改配置比较麻烦,所以线上环境一个TARGETS,内部环境一个TARGETS, 都知道oc和swift混编的时候,会生成一个'项目名-Swift.h'文件,这个文件是隐式的,需 ...
- 全局启动函数start_kernel函数注解
asmlinkage void __init start_kernel(void) { char * command_line; extern struct kernel_param __start_ ...