codeforces 799 C. Fountains(二分+思维)
题目链接:http://codeforces.com/contest/799/problem/C
题意:要求造2座fountains,可以用钻石,也可以用硬币来造,但是能用的钻石有限,硬币也有限,问能造出最大的美丽值为多少。
题解:显然如果两个fountains分别用钻石和硬币来造的话就直接取两种类型里满足条件的最大值即可。
如果选的是同类的话,先按照数量来排序,然后那一个数量为基准二分下个可行的数量,然后还需要一个
数组来存小于等于某个数量的最大美丽值。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int M = 1e5 + 10;
ll a[5] , b[M] , p[M] , CM[M] , DM[M];
char cp[M][3];
struct TnT {
ll pr , be;//pr表示需要多少原料,be表示美丽值为多少
}C[M] , D[M];
bool cmp(int x , int y) {
return x > y;
}
bool cmp1(TnT x , TnT y) {
return x.pr < y.pr;//按照原料量排序
}
ll binsearch(TnT x[] , int l , int r , ll val) {
while(l <= r) {
int mid = (l + r) >> 1;
if(val < x[mid].pr) {
r = mid - 1;
}
else {
l = mid + 1;
}
}
return l;
}
int main() {
ll n , c , d;
ll M1 = -1 , M2 = -1;
cin >> n >> c >> d;
for(int i = 0 ; i < n ; i++) {
cin >> b[i] >> p[i] >> cp[i];
}
for(int i = 0 ; i < n ; i++) {
if(cp[i][0] == 'C' && p[i] <= c) M1 = max(M1 , b[i]);
if(cp[i][0] == 'D' && p[i] <= d) M2 = max(M2 , b[i]);
}
ll sum = 0;
if(M1 != -1 && M2 != -1) {
sum = M1 + M2;//表示各造一种
}
int cnt1 = 0 , cnt2 = 0;
for(int i = 0 ; i < n ; i++) {
if(cp[i][0] == 'C') {
C[cnt1].be = b[i] , C[cnt1].pr = p[i];
cnt1++;
}
else {
D[cnt2].be = b[i] , D[cnt2].pr = p[i];
cnt2++;
}
}
sort(C , C + cnt1 , cmp1);
sort(D , D + cnt2 , cmp1);
memset(CM , -1 , sizeof(CM));
CM[0] = C[0].be;
for(int i = 1 ; i < cnt1 ; i++) {
CM[i] = max(CM[i - 1] , C[i].be);//pr为有序记录小于等于pr的最大美丽值。
}
for(int i = cnt1 - 1 ; i >= 1 ; i--) {
ll gg = c - C[i].pr;
int pos = binsearch(C , 0 , i - 1 , gg);
if(pos != 0) {
sum = max(sum , C[i].be + CM[pos - 1]);
}
}
memset(DM , -1 , sizeof(DM));
DM[0] = D[0].be;
for(int i = 1 ; i < cnt2 ; i++) {
DM[i] = max(DM[i - 1] , D[i].be);
}
for(int i = cnt2 - 1 ; i >= 1 ; i--) {
ll gg = d - D[i].pr;
int pos = binsearch(D , 0 , i - 1 , gg);
if(pos != 0) {
sum = max(sum , D[i].be + DM[pos - 1]);
}
}
cout << sum << endl;
return 0;
}
codeforces 799 C. Fountains(二分+思维)的更多相关文章
- codeforces 895B XK Segments 二分 思维
codeforces 895B XK Segments 题目大意: 寻找符合要求的\((i,j)\)对,有:\[a_i \le a_j \] 同时存在\(k\),且\(k\)能够被\(x\)整除,\( ...
- [Codeforces 1199C]MP3(离散化+二分答案)
[Codeforces 1199C]MP3(离散化+二分答案) 题面 给出一个长度为n的序列\(a_i\)和常数I,定义一次操作[l,r]可以把序列中<l的数全部变成l,>r的数全部变成r ...
- codeforces E. Mahmoud and Ehab and the function(二分+思维)
题目链接:http://codeforces.com/contest/862/problem/E 题解:水题显然利用前缀和考虑一下然后就是二分b的和与-ans_a最近的数(ans_a表示a的前缀和(奇 ...
- codeforces 814 C. An impassioned circulation of affection(二分+思维)
题目链接:http://codeforces.com/contest/814/problem/C 题意:给出一串字符串然后q个询问,问替换掉将m个字符替换为字符c,能得到的最长的连续的字符c是多长 题 ...
- codeforces 808 E. Selling Souvenirs (dp+二分+思维)
题目链接:http://codeforces.com/contest/808/problem/E 题意:最多有100000个物品最大能放下300000的背包,每个物品都有权值和重量,为能够带的最大权值 ...
- codeforces 799 D. Field expansion(dfs+思维剪枝)
题目链接:http://codeforces.com/contest/799/problem/D 题意:给出h*w的矩阵,要求经过操作使得h*w的矩阵能够放下a*b的矩阵,操作为:将长或者宽*z[i] ...
- Codeforces Round #409 C. Voltage Keepsake(二分+思维)
题目链接:http://codeforces.com/contest/801/problem/C 题意:给出一个充电器每秒钟充p个点,还有n个电器要同时使用a[i]表示第i个电器每秒钟用多少点,b[i ...
- codeforces 985 D. Sand Fortress(二分+思维)
Sand Fortress time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Codeforces 975 前缀和二分算存活人数 思维离直线速度相同判平行
A /* Huyyt */ #include <bits/stdc++.h> using namespace std; typedef long long ll; ]; ]; map< ...
随机推荐
- JAVA课堂-动手动脑1
一.Enum:一般用来表示一组相同类型的常量.对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用”==”来替换equals,枚举对象里面的值都必须是唯一的. 代码: public ...
- 夯实Java基础(二)——面向对象之封装
1.封装介绍 封装封装,见名知意,就是把东西包装隐藏起来,不被外界所看见, 而Java特性封装:是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数 ...
- 简洁明了的Noip考场策略 / 平时做题也适用
1.选择策略: 评估的标准得分的难度不是AC的难度 2.思考问题: 怀疑的眼光审视自己 3.写代码前: 想想可不可以换一种代码实现会好写很多 把自己的思路再理一遍,可以写到纸上,记下来大致关键顺序 4 ...
- 一文了解:Redis的RDB持久化
一文了解:Redis的RDB持久化 Redis是内存数据库,为了保证数据不在故障后丢失,Redis需要将数据持久化到硬盘上. Redis持久化有两种方式:一种是快照,全量备份.一种是AOF方式,连续增 ...
- 【Java笔记】【Java核心技术卷1】chapter3 D2注释
package chapter3; /** * 文档注释 *@author lp *@version 1 **/ public class D2注释 { //单行注释 /* 长注释 */ }
- resolv.conf文件配置相关的案例
引言 操作系统中/etc/resolv.conf配置文件中的内容一般为空,如果该文件配置不正确,将导致ssh.route.netstat命令响应慢的问题. 在/etc/resolv.conf添加错误地 ...
- react-navigation报错
用react-navigation配置路由时,出现如下报错或白屏. 我的代码原来是 import {AppRegistry} from 'react-native'; import App from ...
- 「求助」关于MacOS 适配不了SOIL的问题 以及我自己愚蠢的解决办法
我的环境 macOS High Sierra 10.13.6 (2018) 我的SOIL源是通过 终端 git clone https://github.com/DeVaukz/SOIL 直接从gay ...
- 高速开车换底盘记:Windows 与 Linux 部署都抗住了,但修车任务艰巨
抱歉,又是一篇流水账,在排查问题的焦头烂额中写博客的确是一个挑战,望大家见谅. 今天园友溪源More发了一篇博文博客园翻车启示录,而翻车之后的最新进展是——昨天下午我们又把 .net core 引擎的 ...
- (四)c#Winform自定义控件-选择按钮组
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...