题目描述

一个神秘的村庄里有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)

  1. #include <cmath>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <string>
  7. #include <cstring>
  8. using namespace std;
  9. int f[100000005],c[25000005],cc[25000005];
  10. int A,B,C,D,n,a[5005],b[5005],aa[5005],bb[5005],MAX,cnt,cntt,i,j,now;
  11. long long ans;
  12. int main()
  13. {
  14. freopen("eat.in","r",stdin);
  15. freopen("eat.out","w",stdout);
  16. scanf("%d%d%d%d%d",&n,&A,&B,&C,&D);
  17. if (n==0 && A==0 && B==0 && C==0 && D==0) return 0;
  18. for (i=1; i<=A; i++) scanf("%d",&a[i]);
  19. for (i=1; i<=B; i++) scanf("%d",&b[i]);
  20. MAX=0;
  21. cnt=cntt=0;
  22. for (i=1; i<=A; i++)
  23. for (j=1; j<=B; j++)
  24. if (a[i]+b[j]<=n)
  25. {
  26. f[a[i]+b[j]]++;
  27. MAX=max(MAX,a[i]+b[j]);
  28. }
  29. for (i=0; i<=MAX; i++)
  30. while (f[i])
  31. {
  32. f[i]--;
  33. c[++cnt]=i;
  34. }
  35.  
  36. for (i=1; i<=C; i++) scanf("%d",&aa[i]);
  37. for (i=1; i<=D; i++) scanf("%d",&bb[i]);
  38. MAX=0;
  39. for (i=1; i<=C; i++)
  40. for (j=1; j<=D; j++)
  41. if (aa[i]+bb[j]<=n)
  42. {
  43. f[aa[i]+bb[j]]++;
  44. MAX=max(MAX,aa[i]+bb[j]);
  45. }
  46. for (i=0; i<=MAX; i++)
  47. while (f[i])
  48. {
  49. f[i]--;
  50. cc[++cntt]=i;
  51. }
  52. for (i=cntt; i>=1; i--) if (c[1]+cc[i]<=n) break;
  53. now=i;
  54. for (i=1; i<=cnt; i++)
  55. {
  56. ans+=now;
  57. while (now&& c[i+1]+cc[now]>n) now--;
  58. }
  59. cout<<ans<<endl;
  60. ans=0;
  61. return 0;
  62. }//czy020202

终点其实是被彻底忘记,旅程不过是场善意的烛骨铭心。

你可曾记得我的孤寂,我们早已在起点各奔东西······ ——————汪峰《地心》

【CZY选讲·吃东西】的更多相关文章

  1. 【CZY选讲·Hja的棋盘】

    题目描述 Hja特别有钱,他买了一个×的棋盘,然后Yjq到这个棋盘来搞事.一开始所有格子都是白的,Yjq进行次行操作次列操作,所谓一次操作,是将对应的行列上的所有格子颜色取反.现在Yjq希望搞事之后 ...

  2. 【CZY选讲·扩展LCS】

    题目描述 给出两个仅有小写字母组成的字符串str1 和str2,试求出两个串的最长公共子序列. 数据范围 |str1| ⩽ 1000; |str2| ⩽ 10^6 题解:    ①直接进行LCS( ...

  3. 【CZY选讲·一道图论神题】

    题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只有点权. LYK想把这个图删干净,它的方法是这样的.每次选择一个点,将它删掉,但删这个点是需要代价的 ...

  4. 【CZY选讲·最大子矩阵和】

    题目描述 有一个n*m的矩阵,恰好改变其中一个数变成给定的常数P,使得改变后的这个矩阵的最大子矩阵最大. 数据范围 n,m<=300. 题解:    ①如果没有p,那么二维矩阵和就是一维最长 ...

  5. 【CZY选讲·Yjq的棺材】

    题目描述 Yjq想要将一个长为宽为的矩形棺材(棺材表面绝对光滑,所以棺材可以任意的滑动)拖过一个L型墓道. 如图所示,L型墓道两个走廊的宽度分别是和,呈90°,并且走廊的长度远大于. 现在Hja ...

  6. 【CZY选讲·逆序对】

    题目描述 LYK最近在研究逆序对. 这个问题是这样的. 一开始LYK有一个2^n长度的数组ai. LYK有Q次操作,每次操作都有一个参数k.表示每连续2^k长度作为一个小组.假设 n=4,k= ...

  7. 【CZY选讲·Triangle】

    题目描述 长度为的铁丝,你可以将其分成若干段,并把每段都折成一个三角形.你还需要保证三角形的边长都是正整数并且三角形两两相似,问有多少种不同的分法. 数据范围 1≤≤10^6 题解:      ①相 ...

  8. 【CZY选讲·棋盘迷宫】

    题目描述 一个N*M的棋盘,’.’表示可以通过,’#’表示不能通过,给出Q个询问,给定起点和终点,判断两点是否联通,如联通输出“Yes”,否则输出“No”. 数据范围 N,M <=500,Q ...

  9. 【CZY选讲·次大公因数】

    题目描述 给定n个数ai,求sgcd(a1,a1),sgcd(a1,a2),…,sgcd(a1,an). 其中sgcd(x,y)表示x和y的次大公因数.若不存在次大公因数,sgcd(x,y)=-1 ...

随机推荐

  1. Eclipse中文乱码解决方案

    Eclipse中文乱码解决方案 1)第一个设置:window>perferences>general>workspace>text file encoding 2)Jsp编码问 ...

  2. PHP siege 压测 QPS大小

    1.使用 PHP-FPM SOCKET的形式通讯 2.配置 PHP-FPM配置 [root@bogon php-fpm.d]# ls -al 总用量 drwxr-xr-x. root root 8月 ...

  3. php扩展开发-资源类型

    资源类型在内核中的结构 //zend_list.h typedef struct _zend_rsrc_list_entry { void *ptr; int type; int refcount; ...

  4. NPOI导出Excel,添加图片和设置格式,添加条形码

    先上代码 using grproLib; using System; using System.Collections.Generic; using System.Data; using System ...

  5. 笔记-cookie参数

    笔记-cookie参数 cookie各个参数详解 定义和用法 setcookie()函数向客户端发送一个 HTTP cookie. cookie是由服务器发送到浏览器的变量.cookie 通常是服务器 ...

  6. pyplot基础图表函数概述

    pyplot饼图的绘制 pyplot直方图的绘制 极坐标图的绘制

  7. 6,MongoDB 之 Array Object 的特殊操作

    相比关系型数据库, Array [1,2,3,4,5] 和 Object { 'name':'DragonFire' } 是MongoDB 比较特殊的类型了 特殊在哪里呢?在他们的操作上又有什么需要注 ...

  8. 6.定制10MINS首页1

    原始代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  9. 被relativeLayout的grivate center 折腾死了

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  10. python 三目运算

    python中的三目运算: result = a if condition else b #当满足condition返回a否则返回b 三目运算可以使你的代码看起来简洁,且运算高效