1、二叉树(binary)

  1. .二叉树
  2. (binary.cpp/c/pas)
  3. 【问题描述】
  4. 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
  5. ()若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  6. ()若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  7. ()左、右子树也分别为二叉排序树;
  8. ()没有键值相等的结点。
  9. 完全二叉树:只有最下面的两层结点度能够小于2,并且最下面一层的结点
  10. 都集中在该层最左边的若干位置的二叉树。
  11. 1中,(a)和(b)是完全二叉树,(c)和(d)是非完全二叉树。
  12. 给出N个数,且这N个数构成1N的排列。现在需要你按顺序构建一棵二叉
  13. 排序树,并按照层次遍历的方式输出它,然后判断它是否是一棵完全二叉树。
  14. 【输入格式】
  15. 输入文件名为binary.in
  16. 输入文件包含两行。第一行为一个正整数N;第二行为1N的排列。
  17. 【输出格式】
  18. 输出文件名为binary.out
  19. 输出文件包含两行。第一行为构建出的二叉排序树的层次遍历;第二行判
  20. 断是否是完全二叉树:若是输出yes,否则输出no
  21. 【输入输出样例1
  22. binary.in
  23.  
  24. binary.out
  25.  
  26. yes
  27. 【输入输出样例2
  28. binary.in
  29.  
  30. binary.out
  31.  
  32. no
  33. 【数据规模与约定】
  34. 对于100%的数据,≤N≤。

题目

tag:模拟

思路:其实这道题没有看上去那么复杂。插入的时候比节点大就往右走,反之往左走,走到头了放进去,最后建个树。判断是不是完全二叉树要看最大的节点是不是在自己应该在的位置,因为仔细观察发现完全二叉树是每一层从左往右一个一个放,每个节点的数值和编号应该相等(感谢dalao这句话的思路)。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<queue>
  6. using namespace std;
  7. int maxx,list[][],tree[<<],deep,n;
  8. void insert(int o,int x)
  9. {
  10. maxx=max(maxx,o);
  11. if(!tree[o]){
  12. tree[o]=x;
  13. return;
  14. }
  15. if(x>tree[o]) insert(o<<|,x);
  16. else insert(o<<,x);
  17. }
  18. void dfs(int o,int f)
  19. {
  20. deep=max(deep,f);
  21. if(tree[o<<]){
  22. list[f+][++list[f+][]]=tree[o<<];
  23. dfs(o<<,f+);
  24. }
  25. if(tree[o<<|]){
  26. list[f+][++list[f+][]]=tree[o<<|];
  27. dfs(o<<|,f+);
  28. }
  29. }
  30. int main()
  31. {
  32. //freopen("binary.in","r",stdin);
  33. //freopen("binary.out","w",stdout);
  34. int x;
  35. scanf("%d",&n);
  36. for(int i=;i<=n;++i){
  37. scanf("%d",&x);
  38. insert(,x);
  39. }
  40. list[][]=tree[];
  41. list[][]=;
  42. dfs(,);
  43. for(int i=;i<=deep;++i)
  44. for(int j=;j<=list[i][];++j)
  45. printf("%d ",list[i][j]);
  46. puts("");
  47. if(maxx!=n) puts("no");
  48. else puts("yes");
  49. return ;
  50. }

2、列车调度(manage)

  1. 【问题描述】
  2. N辆列车,标记为1,,,…,N。它们按照一定的次序进站,站台共有K个轨
  3. 道,轨道遵从先进先出的原则。列车进入站台内的轨道后可以等待任意时间后出
  4. 站,且所有列车不可后退。现在要使出站的顺序变为N,N-,N-,…,,询问K
  5. 最小值是多少。
  6. 例如上图中进站的顺序为1,,,,,,,,,则出站的顺序变为
  7. ,,,,,,,,。
  8. 【输入格式】
  9. 输入文件名为manage.in
  10. 输入共2行。
  11. 行包含1个正整数N,表示N辆列车。
  12. 行包含N个正整数,为1N的一个排列,表示进站次序。
  13. 【输出格式】
  14. 输出文件名为manage.out
  15. 输出共1行,包含1个整数,表示站台内轨道数K的最小值。
  16. 【输入输出样例1
  17. manage.in
  18.  
  19. manage.out
  20.  
  21. 【输入输出样例2
  22. manage.in
  23.  
  24. manage.out
  25.  
  26. 【数据规模与约定】
  27. 对于 %的数据,N≤;
  28. 对于 %的数据,N≤;
  29. 对于 %的数据,N≤。

题目

tag:二分查找

思路:单纯模拟用时较长(但是O(n2)居然能过???),正解是构造非降序列,比如现在的序列是(5,6,9,11),要把10插入进去,5,6,9都比10小,11比10大就停在11后面,序列变成(5,6,9,10),虽然单个的数值改变了,但是原本的单调性没变,因此我们可以二分查找第一个比要插入的数大的数(0011型)。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<queue>
  6. #include<cstdlib>
  7. #define maxn 100010
  8. using namespace std;
  9. int n,a[maxn],f[maxn],ans=;
  10. int main()
  11. {
  12. //freopen("manage.in","r",stdin);
  13. //freopen("manage.out","w",stdout);
  14. scanf("%d",&n);
  15. for(int i=;i<=n;++i) scanf("%d",&a[i]);
  16. f[]=a[];
  17. for(int i=;i<=n;++i){
  18. int l=lower_bound(f+,f+ans+,a[i])-f;
  19. f[l]=a[i];
  20. ans=max(ans,l);
  21. }
  22. printf("%d",ans);
  23. return ;
  24. }

3、保留道路(road)

  1. 【问题描述】
  2. 很久很久以前有一个国家,这个国家有N个城市,城市由1,,,…,N标号,
  3. 城市间有M条双向道路,每条道路都有两个属性gs,两个城市间可能有多条道
  4. 路,并且可能存在将某一城市与其自身连接起来的道路。后来由于战争的原因,
  5. 国王不得不下令减小花费从而关闭一些道路,但是必须要保证任意两个城市相互
  6. 可达。
  7. 道路花费的计算公式为wG*max{所有剩下道路的属性g}+wS*max{所有剩下道
  8. 路的属性s},其中wGwS是给定的值。国王想要在满足连通性的前提下使这个花
  9. 费最小,现在需要你计算出这个花费。
  10. 【输入格式】
  11. 输入文件名为road.in
  12. 第一行包含两个正整数NM
  13. 第二行包含两个正整数wGwS
  14. 后面的M行每行描述一条道路,包含四个正整数u,v,g,s,分别表示道路连接
  15. 的两个城市以及道路的两个属性。
  16. 【输出格式】
  17. 输出文件名为road.out
  18. 输出一个整数,表示最小花费。若无论如何不能满足连通性,输出-。
  19. 【输入输出样例】
  20. road.in
  21.  
  22. road.out
  23.  
  24. 【数据规模与约定】
  25. 对于 %的数据,N≤,M≤;
  26. 对于 %的数据,N≤,M≤;
  27. 对于 %的数据,N≤,M≤;
  28. 对于 %的数据,N≤,M≤,wG,wS,g,s≤。

题目

tag:最小生成树、轻度玄学(雾)

思路:二维费用的kruskal,很有研究的价值。平时我们做的最小生成树都只有一维,突然多了一个维度,而且还有系数,有点让人手足无措,我们应当以什么标准来选择,加和?乘积?比值?都不行吧,可以随便举反例。正解是,两个权值g,s任选其一作为标准从小到大排序,比如选择g就以g的大小排,再看s的大小,我们造一个栈,从底到顶s从小到大,每放一条边调整栈中各边的位置,做一遍kruskal,记录答案,时间复杂度是O(nm)。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<queue>
  6. #define maxn 100010
  7. #define ll long long
  8. #define inf 1ll<<60
  9. using namespace std;
  10. int gmax,smax,n,m,G,S,fa[maxn],st[maxn],top,tot;
  11. ll ans=inf;
  12. struct Edge{
  13. int u,v,g,s;
  14. }e[maxn];
  15. bool cmp(Edge x,Edge y)
  16. {
  17. return x.g<y.g;
  18. }
  19. int find(int x)
  20. {
  21. return x==fa[x]?x:fa[x]=find(fa[x]);
  22. }
  23. int main()
  24. {
  25. //freopen("road.in","r",stdin);
  26. //freopen("road.out","w",stdout);
  27. int u,v,g,s;
  28. scanf("%d%d",&n,&m);
  29. scanf("%d%d",&G,&S);
  30. for(int i=;i<=m;++i) scanf("%d%d%d%d",&e[i].u,&e[i].v,&e[i].g,&e[i].s);
  31. sort(e+,e+m+,cmp);
  32. for(int i=;i<=m;++i){
  33. int j=;
  34. for(j=;j<=n;++j) fa[j]=j;
  35. for(j=top;j>=;--j)
  36. if(e[st[j]].s>e[i].s)
  37. st[j+]=st[j];
  38. else break;
  39. top++;
  40. st[j+]=i;
  41. tot=;
  42. for(j=;j<=top;++j)
  43. {
  44. int k1=find(e[st[j]].u),k2=find(e[st[j]].v);
  45. if(k1!=k2){
  46. fa[k1]=k2;
  47. st[++tot]=st[j];
  48. }
  49. if(tot==n-) break;
  50. }
  51. if(tot==n-) ans=min(ans,1ll*e[i].g*G+1ll*e[st[n-]].s*S);
  52. top=tot;
  53. }
  54. if(ans==inf) printf("-1");
  55. else printf("%I64d",ans);
  56. return ;
  57. }

————————————————懒得打分割线啊——————————————————

芒果君:考了这么多次,这场翻车最厉害,都倒数了QAQ 还是想太多

冲刺Noip2017模拟赛7 解题报告——五十岚芒果酱的更多相关文章

  1. 冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱

    题1 牛跑步(running) [题目描述] 新牛到部队,CG 要求它们每天早上搞晨跑,从 A 农场跑到 B 农场.从 A 农场到 B 农场中有 n- 个路口,分别标上号,A 农场为 号,B 农场为 ...

  2. 冲刺Noip2017模拟赛1 解题报告——五十岚芒果酱

    题1 国际象棋(chess) [问题描述] 有N个人要参加国际象棋比赛,该比赛要进行K场对弈.每个人最多参加2场对弈,最少参加0场对弈.每个人都有一个与其他人都不相同的等级(用一个正整数来表示).在对 ...

  3. 冲刺Noip2017模拟赛5 解题报告——五十岚芒果酱

    1. 公约数(gcd) [问题描述] 给定一个正整数,在[,n]的范围内,求出有多少个无序数对(a,b)满足 gcd(a,b)=a xor b. [输入格式] 输入共一行,一个正整数n. [输出格式] ...

  4. 冲刺Noip2017模拟赛3 解题报告——五十岚芒果酱

    题1  素数 [问题描述] 给定一个正整数N,询问1到N中有多少个素数. [输入格式]primenum.in 一个正整数N. [输出格式]primenum.out 一个数Ans,表示1到N中有多少个素 ...

  5. 冲刺Noip2017模拟赛8 解题报告——五十岚芒果酱

    1.鼎纹 [问题描述] 据说鼎纹的 种制造 式是 铜模印出来的,这是我国古代劳动 智慧 的结晶.铜模印过的地 ,会留下深深的印记,经过时间的炼化,洗 练成历史的遗存. 聪明的古代劳动人民拥有一个 a ...

  6. 冲刺Noip2017模拟赛6 解题报告——五十岚芒果酱

    1.ksum(ksum) [问题描述] Peter喜欢玩数组.NOIP这天,他从Jason手里得到了大小为n的一个正整数 数组. Peter求出了这个数组的所有子段和,并将这n(n+)/2个数降序排序 ...

  7. 冲刺Noip2017模拟赛4 解题报告——五十岚芒果酱

    题1 韬韬抢苹果(apple) [问题描述] 又到了收获的季节,树上结了许多韬韬,错了,是许多苹果,有很多个小韬韬都来摘苹 果.每个韬韬都想要最大的苹果,所以发生了争执,为了解决他们的矛盾,出题人定了 ...

  8. 20161005 NOIP 模拟赛 T2 解题报告

    beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...

  9. 【HHHOJ】NOIP模拟赛 玖 解题报告

    点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...

随机推荐

  1. 002转载----C# 基于OneNet 的物联网数据通信

    作者:lnwin521 来源:CSDN 原文:https://blog.csdn.net/lnwin521/article/details/84549606 (遇到404情况请复制粘贴后再打开)版权声 ...

  2. 彻底解决eslint与webstorm针对vue的script标签缩进处理方式冲突问题

    彻底解决eslint与webstorm针对vue的script标签缩进处理方式冲突问题 2018年12月08日 21:58:26 Kevin395 阅读数 1753   背景不多介绍了,直接上代码. ...

  3. java+上传文件夹

    最近在学习百度的开源上传组件WebUploader,写了一些示例以记录.WebUploader的缺点是没有一个比较好的现成的界面,这个界面需要自己去实现.自由度高了一些. WebUploader是由B ...

  4. Domain Socket本地进程间通信

    socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络socket也可用于同一台主机的进程间通讯(通过loop ...

  5. 费马小定理 x

    费马小定理(Fermat Theory) 是数论中的一个重要定理,其内容为: 假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p).即:假如a是整数,p是质数,且a,p互质(即两 ...

  6. 网络流24题 P2766 最长不下降子序列问题

    题目描述 «问题描述: 给定正整数序列x1,...,xn . (1)计算其最长不下降子序列的长度s. (2)计算从给定的序列中最多可取出多少个长度为s的不下降子序列. (3)如果允许在取出的序列中多次 ...

  7. cc.Sprite组件

    1.精灵 精灵(Sprite)是Cocos系列的核心概念之一,是Cocos Creator最常用的显示图像的组件. 游戏中显示一个图片,我们就可以把这个叫做"精灵" sprite, ...

  8. 在AspNetCore3.0中使用Autofac

    1. 引入Nuget包 Autofac Autofac.Extensions.DependencyInjection 2. 修改Program.cs 将默认ServiceProviderFactory ...

  9. vue的一些随笔

    一.点击路由后的样式,可以在路由文件index.js中设置 再在样式里面设置active的类名对应的样式. ———————————————————————————————————————————— 二 ...

  10. elasticsearch sql插件配置(5.0及以上版本)

    github官方参考地址:https://github.com/NLPchina/elasticsearch-sql/ 采用 git + node 的方式,所以安装前需要先安装好node,node n ...