2018的寒假去了SD的冬令营,因为一班二班难度悬殊,对我很不友好,几乎什么也没学会,但是我把两个班的课件都存了下来,现在慢慢把两个班的例题以及课后题都补一补(毕竟冬令营的钱不能白花)。

  这些题目横跨各大知名题库以及一大批外国题库,以至于我注册了一批新账号......

  

  基础班Day1:

  这一天的课事实上我并没有去听,而是去二班考试并愉快的爆零了,幸好不大难,自己看也能学会。

  Day1主要讲了队列,栈,堆,(加权)并查集。还提出了“因为数组也是数据结构,所以一切题目都是数据结构题”的精彩言论。

  

  UVA514 Rails:https://www.luogu.org/problemnew/show/UVA514

  题目概述:(火车,铁轨,车厢……)有一个无限大的栈,按照1-n的顺序依次入栈,询问是否能生成给定的出栈序。

  栈的题目,模拟。以前练习初赛时见过这种题的手画版本...事实上也就是那个思路。如果现在想让一个数出栈,可是它还没入栈,就不停的入栈直到它入栈后再弹出;如果它已经在栈里,则必须是栈顶,否则就无法生成这个序列。这题在洛谷上难度虚高,主要是读入很奇妙;输出时如果n将要变化了,要换行,样例里却没换,导致很容易wa。

  1. # include <cstdio>
  2. # include <iostream>
  3. # include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. int n;
  8. int a[],sta[],h=,q=,s=;
  9.  
  10. int main()
  11. {
  12. scanf("%d",&n);
  13. while (n)
  14. {
  15. memset(a,,sizeof(a));
  16. scanf("%d",&a[]);
  17. while (a[]!=)
  18. {
  19. for (int i=;i<=n;i++)
  20. scanf("%d",&a[i]);
  21. q=s=;
  22. h=;
  23. for (int i=;i<=n;++i)
  24. {
  25. while(s<=a[i])
  26. sta[++h]=s++;
  27. while(sta[h]==a[q])
  28. q++,h--;
  29. }
  30. if(s!=n+||h!=||q!=n+)
  31. printf("No\n");
  32. else
  33. printf("Yes\n");
  34. scanf("%d",&a[]);
  35. }
  36. printf("\n");
  37. scanf("%d",&n);
  38. }
  39. return ;
  40. }

Rails


   NOI2001 食物链:https://www.luogu.org/problemnew/show/P2024

 题目概述:有三种动物,食物关系竟然形成了一个环(好不科学啊),给出一些描述:A被B吃,A吃B,A与B是同类,默认先说的话是正确的,并以此判断一共有几句假话。

   这大概是加权并查集最著名的习题了,也可以不用加权做,注意一下加权并查集的路径压缩,还是挺容易写错的。(做完这个题,你的并查集就算入门了---loli)

  

  1. int father(int x)
  2. {
  3. if (x!=f[x])
  4. {
  5. int aa=father(f[x]);
  6. v[x]=(v[x]+v[f[x]])%;
  7. f[x]=aa;
  8. }
  9. return f[x];
  10. }

加权并查集_路径合并

  有一个地方一定要想清楚,在同一个并查集里的元素并不一定是同种生物,只是可以确定相对的关系,如果这里明白了也就比较简单了。

带权并查集的集合合并也别写错啦...就是解一个方程。

  

  

  1. # include <cstdio>
  2. # include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int f[]={},v[]={};
  7.  
  8. int n,k,x,y,z,S=;
  9.  
  10. int father(int x)
  11. {
  12. if (x!=f[x])
  13. {
  14. int aa=father(f[x]);
  15. v[x]=(v[x]+v[f[x]])%;
  16. f[x]=aa;
  17. }
  18. return f[x];
  19. }
  20.  
  21. bool Ya(int x,int y,int z)
  22. {
  23. int a=father(y);
  24. int b=father(z);
  25. if (a==b)
  26. {
  27. if(x==)
  28. {
  29. if(v[y]==v[z]) return true;
  30. return false;
  31. }
  32. if (x==)
  33. {
  34. if(v[z]-v[y]!=-&&v[z]-v[y]!=) return false;
  35. return true;
  36. }
  37. }
  38. if (a!=b)
  39. {
  40. if(x==)
  41. {
  42. v[b]=(v[y]-v[z]+)%;
  43. f[b]=a;
  44. }
  45. if (x==)
  46. {
  47. v[b]=(v[y]-v[z]+)%;
  48. f[b]=a;
  49. }
  50. return true;
  51. }
  52. }
  53.  
  54. int main()
  55. {
  56. scanf("%d%d",&n,&k);
  57. for (int i=;i<=n;i++)
  58. {
  59. f[i]=i;
  60. v[i]=;
  61. }
  62. for (int i=;i<=k;i++)
  63. {
  64. scanf("%d%d%d",&x,&y,&z);
  65. if (z>n||y>n)
  66. S++;
  67. else
  68. if (y==z&&x==) S++;
  69. else
  70. if (Ya(x,y,z)==false) S++;
  71. }
  72. printf("%d",S);
  73. return ;
  74. }

食物链


  合并果子:https://www.luogu.org/problemnew/show/P1090

   题意概述:合并两堆果子的代价是两堆重量之和,要求将n堆果子合并成一堆,求最小代价。

  贪心的想一想发现每次选最小的两堆合并就是最优的。用堆是可以的,也可以用两个队列:首先排序作为第一个队列,每次新合并出来的放进第二个队列末尾,两个队列都是单调的,如果再用一个桶排序就可以达到$O(N)$,但是懒得写...

  

  1. # include <cstdio>
  2. # include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int a,H[]={},r=,n,po,M,t;
  7.  
  8. void push(int x)
  9. {
  10. po=++r;
  11. while(x<H[po/])
  12. {
  13. H[po]=H[po/];
  14. po=po/;
  15. }
  16. H[po]=x;
  17. }
  18.  
  19. void Heapify(int x)
  20. {
  21. M=x;
  22. if (r>=x*+&&H[M]>H[x*+]) M=x*+;
  23. if (r>=x*&&H[M]>H[x*]) M=x*;
  24. if (M!=x)
  25. {
  26. t=H[x];
  27. H[x]=H[M];
  28. H[M]=t;
  29. Heapify(M);
  30. }
  31. }
  32.  
  33. void pop()
  34. {
  35. if (r==)
  36. {
  37. H[]=;
  38. r=;
  39. return;
  40. }
  41. H[]=H[r--];
  42. Heapify();
  43. }
  44.  
  45. int main()
  46. {
  47. int x,y,S=;
  48. scanf("%d",&n);
  49. for (int i=;i<=n;i++)
  50. {
  51. scanf("%d",&a);
  52. push(a);
  53. }
  54. for (int i=;i<n;i++)
  55. {
  56. x=H[]; pop();
  57. y=H[]; pop();
  58. S+=x+y;
  59. push(x+y);
  60. }
  61. cout<<S;
  62. return ;
  63. }

合并果子


   蚯蚓:https://www.luogu.org/problemnew/show/P2827

   题意概述:有n根蚯蚓,每次选出一根最长的切成给定比例的两段,同时其他的蚯蚓长度增加一个常数,求每次被切断的蚯蚓长度。

   首先可以反着想,认为是被剪了的蚯蚓长度减少一个常数,就可以用堆维护了,听起来非常棒,而且很符合今天的上课内容,然而T掉了。那么正解是什么呢?和上一道题一样,又是队列...因为我们是用缩短长度的做法做的,所以每次取出的最长蚯蚓的长度是单调递减的,又因为比例相同,所以切成的两段也是递减的,所以就是三个递减的队列了。

  

  1. # include <cstdio>
  2. # include <iostream>
  3. # include <algorithm>
  4. # include <cstring>
  5. # define R register int
  6.  
  7. using namespace std;
  8.  
  9. int h_1=,t_1=,h_2=,t_2=,h_3=,t_3=,n,m,q,t;
  10. long long x_1,x_2,x,u,v;
  11. long long q_1[],q_2[],q_3[],ans;
  12. const int inf=-1e8;
  13.  
  14. bool cmp(long long a,long long b)
  15. {
  16. return a>b;
  17. }
  18.  
  19. int main()
  20. {
  21. scanf("%d%d%d%lld%lld%d",&n,&m,&q,&u,&v,&t);
  22. memset(q_1,,sizeof(q_1));
  23. memset(q_2,,sizeof(q_2));
  24. memset(q_3,,sizeof(q_3));
  25. for (R i=;i<=n;++i)
  26. scanf("%lld",&q_1[i]);
  27. sort(q_1+,q_1++n,cmp);
  28. for (R i=;i<=m;++i)
  29. {
  30. if(q_1[h_1]>=q_2[h_2]&&q_1[h_1]>=q_3[h_3])
  31. x=q_1[h_1++];
  32. else if(q_2[h_2]>=q_1[h_1]&&q_2[h_2]>=q_3[h_3])
  33. x=q_2[h_2++];
  34. else if(q_3[h_3]>=q_2[h_2]&&q_3[h_3]>=q_1[h_1])
  35. x=q_3[h_3++];
  36. x=x+(i-)*q;
  37. if(i%t==) printf("%lld ",x);
  38. x_1=u*x/v;
  39. x_2=x-x_1;
  40. q_2[++t_2]=x_1-i*q;
  41. q_3[++t_3]=x_2-i*q;
  42. }
  43. printf("\n");
  44. for (R i=;i<=n+m;++i)
  45. {
  46. if(q_1[h_1]>=q_2[h_2]&&q_1[h_1]>=q_3[h_3])
  47. ans=q_1[h_1++];
  48. else if(q_2[h_2]>=q_1[h_1]&&q_2[h_2]>=q_3[h_3])
  49. ans=q_2[h_2++];
  50. else if(q_3[h_3]>=q_2[h_2]&&q_3[h_3]>=q_1[h_1])
  51. ans=q_3[h_3++];
  52. if(i%t==) printf("%lld ",ans+m*q);
  53. }
  54. return ;
  55. }

蚯蚓


  小委出发:https://vijos.org/p/1572


  Largest Rectangle in a Histogram:http://poj.org/problem?id=2559


  Open Gold - Trapped in the Haybales:https://www.lydsy.com/JudgeOnline/problem.php?id=4099

  这在bzoj上是个权限题,usaco上肯定有,然而我找不到。。。下次借个权限号做。

  基础班Day2:我把课件弄丢啦!!有好心人给我一份吗!
  

  基础班Day3:

  深搜、广搜,虽然是基础算法但是也有不少难题呢。

  基础班Day4:

  贪心,dp。

  基础班Day5:

  数论,倍增。

  基础班Day6:

  线段树与树状数组。




  

  提高班Day1:

  线段树,主席树。

  

  提高班Day2:

  数论。

  提高班Day3:

  计算几何。

  提高班Day4:

  动规及优化。

  提高班Day5:

  Splay,Lct,链剖,网络流,图论题目选讲。

  提高班Day6:(老师跑路了没上课)

  补完这些还有每天的考试题,也都是很好的题,感觉任务艰巨。

---shzr

SDWC补题计划的更多相关文章

  1. bzoj3208: 花神的秒题计划Ⅰ

    3208: 花神的秒题计划Ⅰ Time Limit: 16 Sec  Memory Limit: 128 MBSubmit: 323  Solved: 211[Submit][Status] Desc ...

  2. hdu5017:补题系列之西安网络赛1011

    补题系列之西安网络赛1011 题目大意:给定一个椭球: 求它到原点的最短距离. 思路: 对于一个椭球的标准方程 x^2/a^2 + y^2/b^2 +z^2/c^2=1 来说,它到原点的最短距离即为m ...

  3. 2017河工大校赛补题CGH and 赛后小结

    网页设计课上实在无聊,便开始补题,发现比赛时候僵着的东西突然相通了不少 首先,"追妹"这题,两个队友讨论半天,分好多种情况最后放弃(可是我连题目都没看啊),今天看了之后试试是不是直 ...

  4. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  5. 2018 HDU多校第三场赛后补题

    2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...

  6. [数]补题ver.

    上次补题好像把两次训练混在一起了,总之先按时间顺序补完这一次|ू・ω・` ) HDU-6301 不会的东西不能逃避.jpg 红小豆非常讨厌构造题,因为非常不会,并且非常逃避学习这类题,因为总也搞不清楚 ...

  7. [TaskList] 省选前板子补完计划

    省选前本子补完计划 [ ] 带权并查集 [ ] 树上莫队 - UOJ58 [WC2013]糖果公园 loj2485「CEOI2017」Chase

  8. OSPF补全计划-0 preface

    哇靠,一看日历吓了我一跳,我这一个月都没写任何东西,好吧,事情的确多了点儿,同事离职,我需要处理很多untechnical的东西,弄得我很烦,中间学的一点小东西(关于Linux的)也没往这里记,但是我 ...

  9. bzoj 前100题计划

    bzoj前100题计划 xz布置的巨大的坑.. 有空填题解... 1002 轮状病毒 用python手动matrixtree打表. #include<bits/stdc++.h> #def ...

随机推荐

  1. $("input[name=name]").val(); 无法获取值问题

    <input type="text" class="text" name="name" placeholder= 例如:上海" ...

  2. HTML列表(组标签)+div(布局标签)与span

    一.列表 HTML中常见的列表有三种,分别是: 1.无序列表,是一组描述列表语义的组标签,列表中每个项之间没有先后顺序:如图: 1)组标签:组标签就是由多个标签组成的一个整体,它们之间共同存在:例如 ...

  3. SQLite的Integer类型

    SQLite 中的 INTEGER:带符号的整型,具体取决有存入数字的范围大小,根据大小可以使用1,2,3,4,6,8字节来存储. 在SQLite中,存储分类和数据类型也有一定的差别,如INTEGER ...

  4. MYSQL与MSSQL对比学习

    最近在将公司的一个产品里面相关的MSSQL语句修改为可以在MYSQL上执行的语句 l  优点分析: MYSQL短小精悍,容易上手,操作简单,免费供用的.相对其它数据库有特色又实用的语法多一些.SQL怎 ...

  5. Python 2 和 Python 3 有哪些主要区别

    概述# 原稿地址:使用 2to3 将代码移植到 Python 3 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个 ...

  6. 【学习笔记】--- 老男孩学Python,day18 面向对象------继承

    继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类, 父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 class Fathe ...

  7. HTML标签参考(二)

    一些重要的标签 • ol li  <ol><li></li></ol>这是一组标签,它们二者都是成对出现的,每一个标签单独出现都是没有意义的事情. 这一 ...

  8. webpack打包遇到过的问题

    1.打包后html文件打开是空白页面,报错信息如图所示: 解决办法:这里主要是将assetsPublicPath的路径从'/'改为'./'就好了. ('/'表示根目录:'./'表示当前目录) 2.运行 ...

  9. 网络I/O模型--02阻塞模式(多线程)

    当服务器收到客户端 X 的请求后(读取到所有请求数据后),将这个请求送入一个独立线程进行处理,然后主线程继续接收客户端 Y 的请求. 客户端一侧也可以使用一个子线程和服务器端进行通信.这样客户端主线程 ...

  10. 大数据量报表APPLET打印分页传输方案

     1 . 问题概述 当报表运算完成时,客户端经常需要调用润乾自带的runqianReport4Applet.jar来完成打印操作, 然而数据量比较大的时候,会导致无法加载完成,直至applet内存 ...