【CZY选讲·吃东西】
题目描述
一个神秘的村庄里有4家美食店。这四家店分别有A,B,C,D种不同的美食。LYK想在每一家店都吃其中一种美食。每种美食需要吃的时间可能是不一样的。现在给定第1家店A种不同的美食所需要吃的时间a1,a2,…,aA。给定第2家店B种不同的美食所需要吃的时间b1,b2,…,bB。以及c和d。LYK拥有n个时间,问它有几种吃的方案。
数据范围
1<=n<=100000000,1<=A,B,C,D<=5000,0<=ai,bi,ci,di<=100000000。
此题空间足够大,时间2s。
Ps.不要在意复杂度,事实证明O(n)能过。
题解:
①时间复杂度能够承受:50002,因此考虑暴力先讲AB CD两组的组合结果求出来。
②对于得到的两个数组进行组合,首先肯定要排序。
③排序使用桶排序O(n)。然后维护两个指针,一个在1数组开头,一个在2数组结尾。
④根据单调性,两个指针只会向相反方向移动,时间复杂度O(n)
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
int f[100000005],c[25000005],cc[25000005];
int A,B,C,D,n,a[5005],b[5005],aa[5005],bb[5005],MAX,cnt,cntt,i,j,now;
long long ans;
int main()
{
freopen("eat.in","r",stdin);
freopen("eat.out","w",stdout);
scanf("%d%d%d%d%d",&n,&A,&B,&C,&D);
if (n==0 && A==0 && B==0 && C==0 && D==0) return 0;
for (i=1; i<=A; i++) scanf("%d",&a[i]);
for (i=1; i<=B; i++) scanf("%d",&b[i]);
MAX=0;
cnt=cntt=0;
for (i=1; i<=A; i++)
for (j=1; j<=B; j++)
if (a[i]+b[j]<=n)
{
f[a[i]+b[j]]++;
MAX=max(MAX,a[i]+b[j]);
}
for (i=0; i<=MAX; i++)
while (f[i])
{
f[i]--;
c[++cnt]=i;
} for (i=1; i<=C; i++) scanf("%d",&aa[i]);
for (i=1; i<=D; i++) scanf("%d",&bb[i]);
MAX=0;
for (i=1; i<=C; i++)
for (j=1; j<=D; j++)
if (aa[i]+bb[j]<=n)
{
f[aa[i]+bb[j]]++;
MAX=max(MAX,aa[i]+bb[j]);
}
for (i=0; i<=MAX; i++)
while (f[i])
{
f[i]--;
cc[++cntt]=i;
}
for (i=cntt; i>=1; i--) if (c[1]+cc[i]<=n) break;
now=i;
for (i=1; i<=cnt; i++)
{
ans+=now;
while (now&& c[i+1]+cc[now]>n) now--;
}
cout<<ans<<endl;
ans=0;
return 0;
}//czy020202
终点其实是被彻底忘记,旅程不过是场善意的烛骨铭心。
你可曾记得我的孤寂,我们早已在起点各奔东西······ ——————汪峰《地心》
【CZY选讲·吃东西】的更多相关文章
- 【CZY选讲·Hja的棋盘】
题目描述 Hja特别有钱,他买了一个×的棋盘,然后Yjq到这个棋盘来搞事.一开始所有格子都是白的,Yjq进行次行操作次列操作,所谓一次操作,是将对应的行列上的所有格子颜色取反.现在Yjq希望搞事之后 ...
- 【CZY选讲·扩展LCS】
题目描述 给出两个仅有小写字母组成的字符串str1 和str2,试求出两个串的最长公共子序列. 数据范围 |str1| ⩽ 1000; |str2| ⩽ 10^6 题解: ①直接进行LCS( ...
- 【CZY选讲·一道图论神题】
题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只有点权. LYK想把这个图删干净,它的方法是这样的.每次选择一个点,将它删掉,但删这个点是需要代价的 ...
- 【CZY选讲·最大子矩阵和】
题目描述 有一个n*m的矩阵,恰好改变其中一个数变成给定的常数P,使得改变后的这个矩阵的最大子矩阵最大. 数据范围 n,m<=300. 题解: ①如果没有p,那么二维矩阵和就是一维最长 ...
- 【CZY选讲·Yjq的棺材】
题目描述 Yjq想要将一个长为宽为的矩形棺材(棺材表面绝对光滑,所以棺材可以任意的滑动)拖过一个L型墓道. 如图所示,L型墓道两个走廊的宽度分别是和,呈90°,并且走廊的长度远大于. 现在Hja ...
- 【CZY选讲·逆序对】
题目描述 LYK最近在研究逆序对. 这个问题是这样的. 一开始LYK有一个2^n长度的数组ai. LYK有Q次操作,每次操作都有一个参数k.表示每连续2^k长度作为一个小组.假设 n=4,k= ...
- 【CZY选讲·Triangle】
题目描述 长度为的铁丝,你可以将其分成若干段,并把每段都折成一个三角形.你还需要保证三角形的边长都是正整数并且三角形两两相似,问有多少种不同的分法. 数据范围 1≤≤10^6 题解: ①相 ...
- 【CZY选讲·棋盘迷宫】
题目描述 一个N*M的棋盘,’.’表示可以通过,’#’表示不能通过,给出Q个询问,给定起点和终点,判断两点是否联通,如联通输出“Yes”,否则输出“No”. 数据范围 N,M <=500,Q ...
- 【CZY选讲·次大公因数】
题目描述 给定n个数ai,求sgcd(a1,a1),sgcd(a1,a2),…,sgcd(a1,an). 其中sgcd(x,y)表示x和y的次大公因数.若不存在次大公因数,sgcd(x,y)=-1 ...
随机推荐
- MySQL跟踪SQL&慢查询分析工具
简介 之前的工作一直使用的SQL SERVER, 用过的都知道,SQL SERVER有配套的SQL跟踪工具SQL Profiler,开发或者定位BUG过程中,可以在操作页面的时候,实时查看数据库执行的 ...
- egg- 配置
1. model module.exports = app => { const { INTEGER, STRING, TEXT } = app.Sequelize; const User = ...
- tomcat7下载地址
tomcat7下载地址:https://tomcat.apache.org/download-70.cgi
- Shell学习——变量
1.在Bash中,每一个变量的值都是字符串 2.查看某个进程的环境变量 cat /proc/$PID/environ | tr '\0' '\n' 3.变量赋值 3.1.var=value,注意var ...
- http网络协议 学习摘要
一:HTTP协议状态码 状态码主要用于描述当客户端向服务器发送请求时的返回结果,标记服务端的处理是否正常,通知出现的错误等工作. 状态码整体分为五大类: 1开头的状态码:信息类状态码,主要接收请求,表 ...
- 裸机——210SD卡启动
1.通过阅读iROM_Application_note可以获取关于启动的全部信息 2.记录下代码 制作SD卡启动的代码,即添加校验和的 #include <strings.h> #incl ...
- cocos2d-x 3.0环境配置(转)
cocos2d-x 3.0发布有一段时间了,作为一个初学者,我一直觉得cocos2d-x很坑.每个比较大的版本变动,都会有不一样的项目创建方式,每次的跨度都挺大…… 但是凭心而论,3.0RC版本开始 ...
- 微信小程序 | 49,小程序入门集锦系列文章20篇
以下20篇文章,都是关于微信小程序的文章,以入门常见问题为主.如发现谬误,请与笔者联系. [小程序入门集锦]1,微信小程序在哪里打开 [小程序入门集锦]2,小程序商店 [小程序入门集锦]3,微信小程序 ...
- Struts2---环境搭建及包介绍
导入jar包 jar包下载地址:http://www.apache.org/官网中选择struts,然后点击download下载.将jar包导入到WEB-INF下的lib文件目录下. asm-5.2. ...
- 《Cracking the Coding Interview》——第9章:递归和动态规划——题目11
2014-03-21 20:20 题目:给定一个只包含‘0’.‘1’.‘|’.‘&’.‘^’的布尔表达式,和一个期望的结果(0或者1).如果允许你用自由地给这个表达式加括号来控制运算的顺序,问 ...