[NOI.AC] candy
2024-08-31 02:25:17
题意:求净利益。
思路:
其实我也不怎么懂题面。
不过这种题一般来说就是从最大的开始选。
所以考虑贪心。
那么代价如何处理呢??
我们考虑两个序列同时选数,把代价每次记录到一个序列的和上,那么对于两次的净利益求最大即可。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
const int maxn = 100010;
int a[maxn];
int b[maxn];
inline int solve(int *a,int *b,int n,int W) {
int sum_a = 0;
int sum_b = 0;
int ans = -999;
for(int i = 1,tmp = 0;i <= n; ++i) {
sum_a += a[i];
while(tmp <= n && sum_b < sum_a) {
sum_b += b[++tmp];
}
if(sum_a <= sum_b) {
ans = max((ll)ans,sum_a - (ll)W * (i + tmp));
}
}
return ans;
}
inline bool cmp(int a,int b) {
return a > b;
}
int n,W;
signed main () {
cin >> n >> W;
for(int i = 1;i <= n; ++i) {
cin >> a[i];
}
for(int i = 1;i <= n; ++i) {
cin >> b[i];
}
sort(a + 1,a + n + 1,cmp);sort(b + 1,b + n + 1,cmp);
int ans1 = solve(a,b,n,W);
int ans2 = solve(b,a,n,W);
printf("%lld\n",max(ans1,ans2));
return 0;
}
最新文章
- 三大框架SSH整合
- paramiko模块的安装
- 在input中实现点点点与当鼠标移上去时显示剩余的字
- HTML-学习笔记(样式)
- Eclipse 语法提示
- OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)
- 用C#打开文件对话框的方法和简单使用的程序
- sql自动生成汉语拼音和首字母函数
- Ubuntu Nginx搭建Gitweb服务器
- CSAPP2e:Shell lab 解答
- poj 2406 Power Strings【最小循环节】
- removeObjectAtIndex
- linux判断文件是否存在
- Dynamics CRM Odata QueryUrl中的SetName问题
- 填坑!!!virtualenv 中 nginx + uwsgi 部署 django
- MySQL官方教程及各平台的安装教程和配置详解入口
- 转:slf4j-api、slf4j-log4j12、log4j之间关系
- 阿里云申请免费https证书 + IIS服务器安装
- 普通用户开放 sudo 权限
- 温故而知新 babel-cli 的相关使用