题目大意:

给定n k

接下来n行 给定n个摊位的冰淇淋信息

首先给一个t 表示这个摊位有t个冰淇淋 接下来t个数表示对应冰淇淋的品种

走到连续的几个摊位 会买下走过的摊位的所有的冰淇淋

求 要买下所有k个品种的冰淇淋 最少需要买下多少冰淇淋

尺取法

L R指针移动 表示走过L~R的摊位

利用cnt[]记录品种信息

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define LL long long
  4. #define INF 0x3f3f3f3f
  5. #define mem(i,j) memset(i,j,sizeof(i))
  6. #define inc(i,l,r) for(int i=l;i<=r;i++)
  7. #define dec(i,r,l) for(int i=r;i>=l;i--)
  8. #define gcd(i,j) __gcd(i,j);
  9. const int N=1e6+;
  10. const int mod=1e9+;
  11. const double eps=1e-;
  12.  
  13. int n,k;
  14. vector<int>v[N]; // v[i]中存有i摊位有的品种
  15. int cnt[N]; // cnt[i]为此时区间中i品种的数量
  16.  
  17. int main()
  18. {
  19. while(~scanf("%d%d",&n,&k)) {
  20. inc(i,,n) v[i].clear();
  21. inc(i,,k) cnt[i]=;
  22. inc(i,,n) {
  23. int t; scanf("%d",&t);
  24. while(t--) {
  25. int m; scanf("%d",&m);
  26. v[i].push_back(m);
  27. }
  28. }
  29. int ans=INF;
  30. int L=,R=,num=,all=;
  31. while(L<=n) {
  32. int len=v[R].size();
  33. all+=len;
  34. inc(i,,len-) // 记录这个摊位的品种
  35. if(cnt[v[R][i]]++==) num++;
  36. R= (R+)%n== ? n:(R+)%n;
  37. if(R==L && num<k) break; // 说明所有摊位都无法凑齐所有品种
  38. while(num==k && L<=n) { // 找到了k个品种
  39. ans=min(ans,all);
  40. len=v[L].size();
  41. inc(i,,len-) // 移动左端 可能有富余
  42. if(--cnt[v[L][i]]==) num--;
  43. L++; all-=len;
  44. }
  45. }
  46. if(ans==INF) printf("-1\n");
  47. else printf("%d\n",ans);
  48. }
  49.  
  50. return ;
  51. }

CTU OPEN 2017 Ice cream samples /// 尺取法的更多相关文章

  1. Gym - 101670G Ice cream samples(CTU Open Contest 2017 尺取法)

    题目: To encourage visitors active movement among the attractions, a circular path with ice cream stan ...

  2. Ice cream samples Gym - 101670G 滑动扫描

    题目:题目链接 思路:比赛中读错了题,题目要求选一个连续区间,却读成了随便选取几个柜台,英语要好好学啊,读懂题就很简单了,扫一遍就出结果了 AC代码: #include <iostream> ...

  3. hdu6103[尺取法] 2017多校6

    /*hdu6103[尺取法] 2017多校6*/ #include <bits/stdc++.h> using namespace std; int T, m; ]; void solve ...

  4. HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017"百度之星"程序设计大赛 - 初赛(B))

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  5. HDU 6205(尺取法)2017 ACM/ICPC Asia Regional Shenyang Online

    题目链接 emmmm...思路是群里群巨聊天讲这题是用尺取法.....emmm然后就没难度了,不过时间上3000多,有点.....盗了个低配本的读入挂发现就降到2800左右, 翻了下,发现神犇Clar ...

  6. Ice Cream Tower

    2017-08-18 21:53:38 writer:pprp 题意如下: Problem D. Ice Cream Tower Input file: Standard Input Output f ...

  7. QDUOJ 河老师的新年礼物(尺取法)

    河老师的新年礼物 发布时间: 2017年1月1日 15:11   最后更新: 2017年1月1日 15:13   时间限制: 1000ms   内存限制: 256M 描述 河老师的新年礼物是一个长度为 ...

  8. HDU 5806 NanoApe Loves Sequence Ⅱ ——(尺取法)

    题意:给出一个序列,问能找出多少个连续的子序列,使得这个子序列中第k大的数字不小于m. 分析:这个子序列中只要大于等于m的个数大于等于k个即可.那么,我们可以用尺取法写,代码不难写,但是有些小细节需要 ...

  9. 5806 NanoApe Loves Sequence Ⅱ(尺取法)

    传送门 NanoApe Loves Sequence Ⅱ Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/131072 K ...

随机推荐

  1. VS 2017产品秘钥

    Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH

  2. Shell脚本中判断输入变量或者参数是否为空的方法

    shell判断一个变量是否为空方法总结 https://www.jb51.net/article/154835.htm 1.判断变量 复制代码代码如下: read -p "input a w ...

  3. [Fw]初探linux中断系统(2)

    初探linux中断系统(2) 中断系统初始化的过程 用来初始化中断系统的函数位于arch/x86/kernel/irqinit.c,定义如下 void __init init_IRQ(void){ i ...

  4. Python之计算当前月份的日期范围(calendar、datetime)

    在当前月份中循环每一天大致的思路就是先计算出当月的第一天和下个月的第一天日期,还有当月总共有多少天,然后把第一天日期按照月总天数累加到下个月的第一天,就ok 啦 from datetime impor ...

  5. docker 部署vsftpd服务、验证及java ftp操作工具类

    docker部署vsftpd服务 新建ftp文件存储目录/home/ftp cd /home mkdir ftp 创建一个组,用于存放ftp用户 groupadd ftpgroups 创建ftp用户, ...

  6. 用react+redux+webpack搭建项目一些疑惑

    --save-dev开发用 例如:webpack --save开发和发布用 例如:react

  7. 后台执行循环(done &)

  8. Tensorflow读取大数据集的方法,tf.train.string_input_producer()和tf.train.slice_input_producer()

    1. https://blog.csdn.net/qq_41427568/article/details/85801579

  9. 一、Json

    一.Json遍历模糊查询 你没admin 所以这句话报错. //1.写法 dynamic query = from user in jsonObject where (user.ToString(). ...

  10. socket套接字编程 HTTP协议

    socket套接字编程  套接字介绍  1. 套接字 : 实现网络编程进行数据传输的一种技术手段  2. Python实现套接字编程:import  socket  3. 套接字分类 >流式套接 ...