沿时间轴枚举,发现关键时间点在于新题目被锁定的前一时间,那是新的题目还没有被锁定并且距离旧的题目已经被锁定的最晚时间,对这些时间点进行操作

 #define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
typedef struct node{
int flag,s;
};
node c[];
bool cmp(node x,node y){
if(x.s!=y.s)
return x.s<y.s;
return x.flag<y.flag;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int m;
cin>>m;
while(m--){
int n,t,a,b;
cin>>n>>t>>a>>b;
int suma=,sumb=;
for(int i=;i<=n;++i){
cin>>c[i].flag;
if(c[i].flag)
++sumb;
}
suma=n-sumb;
for(int i=;i<=n;++i)
cin>>c[i].s;
sort(c+,c++n,cmp);
int now=;
int tempa=,tempb=;
int ans=;
for(int i=;i<=n;++i){//枚举当前时间c[i].s-1,即为当前题目被锁定的时间以前
//当前时间及以前被锁定的题目都要完成,当前时间只完成前i-1道已锁定的题目以及空余时间可以做的题目
int numa=min(suma-tempa,(c[i].s--now)/a);//如果完成锁定题目以外还有空余时间,计算得到空余时间可以解决的最大简单题数量
int numb=min(sumb-tempb,(c[i].s--now-numa*a)/b);//如果解决完简单题还有空余时间,计算得到空余时间可以解决的最大复杂题数量
if(numa<)
numa=;
if(numb<)
numb=;
if(now<=c[i].s-)//now表示完成已经锁定的题目(前i-1道)需要的时间,如果当前时间可以完成这些已经锁定的题目,答案才会更新
ans=max(ans,numa+numb+i-);
if(c[i].flag){
now+=b;
++tempb;//已锁定的复杂题
}
else{
now+=a;
++tempa;//已锁定的简单题
}
if(now>t)//完成锁定的题目需要的时间超出上限,那么就做不了更多的题目了,break
break;
if(i==n)//如果全部题目都已经锁定并且完成时间不超出上限
ans=n;
}
cout<<ans<<"\n";
}
return ;
}

Codeforces Round #610 (Div. 2)C(贪心,思维)的更多相关文章

  1. Codeforces Round #546 (Div. 2) D 贪心 + 思维

    https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...

  2. Codeforces Round #547 (Div. 3) F 贪心 + 离散化

    https://codeforces.com/contest/1141/problem/F2 题意 一个大小为n的数组a[],问最多有多少个不相交的区间和相等 题解 离散化用值来做,贪心选择较前的区间 ...

  3. Codeforces Round #595 (Div. 3)D1D2 贪心 STL

    一道用STL的贪心,正好可以用来学习使用STL库 题目大意:给出n条可以内含,相交,分离的线段,如果重叠条数超过k次则为坏点,n,k<2e5 所以我们贪心的想我们从左往右遍历,如果重合部分条数超 ...

  4. Codeforces Round #554 (Div. 2) D 贪心 + 记忆化搜索

    https://codeforces.com/contest/1152/problem/D 题意 给你一个n代表合法括号序列的长度一半,一颗有所有合法括号序列构成的字典树上,选择最大的边集,边集的边没 ...

  5. Codeforces Round #610 (Div. 2) A-E简要题解

    contest链接: https://codeforces.com/contest/1282 A. Temporarily unavailable 题意: 给一个区间L,R通有网络,有个点x,在x+r ...

  6. Codeforces Round #303 (Div. 2) D 贪心

    D. Queue time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  7. Codeforces Round #336 (Div. 2)【A.思维,暴力,B.字符串,暴搜,前缀和,C.暴力,D,区间dp,E,字符串,数学】

    A. Saitama Destroys Hotel time limit per test:1 second memory limit per test:256 megabytes input:sta ...

  8. Codeforces Round #545 (Div. 2) D 贪心 + kmp

    https://codeforces.com/contest/1138/problem/D 题意 两个01串s和t,s中字符能相互交换,问最多能得到多少个(可交叉)的t 题解 即将s中的01塞进t中, ...

  9. Codeforces Round #547 (Div. 3) G 贪心

    https://codeforces.com/contest/1141/problem/G 题意 在一棵有n个点的树上给边染色,连在同一个点上的边颜色不能相同,除非舍弃掉这个点,问最少需要多少种颜色来 ...

随机推荐

  1. MFC线程间消息传递(转)

    原文地址:https://blog.csdn.net/qq_37059136/article/details/84972192

  2. django orm查询和后端缓存的使用

    django orm 查询 1 字段后(db_column='age') (null=True)#表示数据库里面的该字段数据可以为空 (blank=True)#表示前端表单提交的时候可以为空 (db_ ...

  3. 【数据结构】【C++】堆栈的实现与应用

    堆栈(Stack) 参考浙大版<数据结构(第2版)> 堆栈可以认为是具有一定约束的线性表,插入和删除的操作都在栈顶的位置,先进入的元素将在后进入的元素之后取出,与生活中的桶类似,故又称为后 ...

  4. BibTex 学习笔记

    BibTex 学习笔记 使用BibTex 来管理参考文献:一次管理,终身使用! 1. 定义 BibTeX 是一个使用数据库的的方式来管理参考文献程序, 用于协调LaTeX的参考文献处理. BibTeX ...

  5. 02 Django虚拟环境搭建

    01 创建虚拟环境目录 该目录用于存放所有虚拟环境. cd / mkdir venv cd venv 02 创建当前项目的虚拟环境 virtualenv --python=/usr/bin/pytho ...

  6. Redis5-集群搭建实验

    集群规划: nodeA:192.168.29.22(22-master,23-slave) nodeB:192.168.29.23(23-master,24-slave) nodeC:192.168. ...

  7. socks5代理服务器搭建

    1.首先,编译安装SS5需要先安装一些依赖组件 yum -y install gcc gcc-c++ automake make pam-devel openldap-devel cyrus-sasl ...

  8. MyBatis 动态代理开发

    MyBatis 动态代理开发 §  Mapper.xml文件中的namespace与mapper接口的类路径相同. §  Mapper接口方法名和Mapper.xml中定义的每个statement的i ...

  9. Python MonkeyRunner 连接设备总是返回连接成功问题

    device = mr.waitForConnection(1,deviceName) 当使用waitForConnection时,不管设备是否连接,device总是返回一个对象,所以没有办法通过 i ...

  10. 同一域名的ASP.NET网站实现Session共享

    Session共享主要保证两点: 前台Asp_SessionId的Cookie作用域为顶级域名,且值相同 后端Session公用同一源 通过自定义HttpModule可以实现这两个需求 /// < ...