cccc的天梯赛决赛,水题一样的水,中档题以上的还是没做出来。补了一下题,觉得其实也不是很难,主要是练的少。

L2-1:红色预警 并查集

我做的时候想不到并查集,想到了也不一定做的出来,都是其实不难。
每次失去一个城市,重新计算过并查集,比较几个根节点,如果根节点增加了那么就是改变了连通性。

#include<cstdio>
#define N 505
#define M 5005
using namespace std;
int n,m,k,g,cnt,newcnt;
int f[N],u[M],v[M];
int find(int x)
{
if(f[x]!=x)
f[x]=find(f[x]);
return f[x];
}
void un(int a,int b)
{
int fa=find(a),fb=find(b);
if(fa!=fb)
f[fa]=fb;
}
void solve()
{
f[g]=-;
newcnt=;
for(int i=; i<n; i++)if(f[i]!=-)f[i]=i;
for(int i=; i<m; i++)
if(f[u[i]]!=-&&f[v[i]]!=-)
un(u[i],v[i]);
for(int i=; i<n; i++)if(f[i]==i)
newcnt++;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=; i<n; i++)f[i]=i;
for(int i=; i<m; i++)
{
scanf("%d%d",&u[i],&v[i]);
un(u[i],v[i]);
}
scanf("%d",&k);
for(int i=; i<n; i++)if(f[i]==i)
cnt++;
for(int i=; i<=k; i++)
{
scanf("%d",&g);
solve();
if(cnt<newcnt)printf("Red Alert: City %d is lost!\n",g);
else printf("City %d is lost.\n",g);
cnt=newcnt;
if(k==i&&k==n)printf("Game Over.");
}
}

  L2-2列车调度 最长上升子序列 O(nlogn)解法

这题题意是求1到n的一个排列里可以分成最少多少个下降子序列,如果做过导弹拦截那么容易地可以知道问题等价于求最长上升子序列,而且要用O(nlogn)的解法。
s[i]s[i]表示上升子序列的长度为i时最后一个数的最小值。
当i<j时,有s[i]<s[j],因为长度比较长的子序列,它末尾的值也肯定更大。
有了这个性质,就可以用二分查找了。
每次找出s里值小于a[i]的最大下标j,把s[j]更新为a[i]。

#include<cstdio>
#include<algorithm>
using namespace std;
#define N 100005
int n,a[N],s[N],ans=;
int main()
{
scanf("%d",&n);
for(int i=; i<=n; i++)
{
s[i]=0x3f3f3f3f;
scanf("%d",&a[i]);
}
s[]=;
for(int i=; i<=n; i++)
{
int l=,r=i-;
while(l<r){
int m=(l+r)>>;
if(s[m]<=a[i])l=m+;
else r=m;
}
if(s[l]<=a[i]){
s[l+]=min(s[l+],a[i]);
ans=max(ans,l+);
}else{
s[l]=min(s[l],a[i]);
ans=max(ans,l);
}
}
printf("%d",ans);
}

L3-1 是否完全二叉搜索树

完全二叉树的概念:从上到下,每一层从左到右填充树的节点。
题意是给你n个数,从根节点开始每次和节点比较,如果更大,那就插入左子树,更小就插入右子树。
遍历的最后一个数字如果刚好是第n个节点,那就是完全二叉树。

#include<cstring>
#include<cstdio>
using namespace std;
int n,t,k,tree[<<];
void build(int w,int v)
{
if(tree[w]==-)tree[w]=v;
else if(v>tree[w]) build(w<<,v);
else build(w<<|,v);
}
int main()
{
memset(tree,-,sizeof tree);
scanf("%d",&n);
for(int i=; i<n; i++)
{
scanf("%d",&t);
build(,t);
}
k=;
for(int i=; i<=n; k++)
if(tree[k]!=-)
{
printf("%d%c",tree[k],i==n?'\n':' ');
i++;
}
if(k==n+)puts("YES");
else puts("NO");
}

  

【CCCC天梯赛决赛】的更多相关文章

  1. 记第一届 CCCC-团体程序设计天梯赛决赛 参赛

    其他都没什么,上午报道,下午比赛两个半小时,最后139分 但四我超遗憾的是,最后在做L3-1二叉搜索树,因为看到有辣么多人做出来,可是我没做出来啊 比赛结束后看了看其他两道当场吐血,L3-3直捣黄龙不 ...

  2. 记cccc天梯赛第三届决赛

        首先我很想知道,为什么我没有参加初赛,就可以去决赛,这个究竟有没有初赛,这真是未解之谜.     其次,会长说得不错,菜是原罪.不知道这次的表现能不能把我送去湘潭挑战赛....     我身边 ...

  3. 2016年团体程序设计天梯赛-决赛 L2-3. 互评成绩(25)

    学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩.系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩.本题就要求你编写这个互评系统的算分模块. ...

  4. 2016年团体程序设计天梯赛-决赛 L1-8. Left-pad(20)

    根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的Re ...

  5. 2016年团体程序设计天梯赛-决赛 L1-7. 到底是不是太胖了(10)

    据说一个人的标准体重应该是其身高(单位:厘米)减去100.再乘以0.9所得到的公斤数.真实体重与标准体重误差在10%以内都是完美身材(即 |真实体重-标准体重| < 标准体重x10%).已知市斤 ...

  6. 2016年团体程序设计天梯赛-决赛 L1-6. 一帮一(15)

    “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组.本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中, ...

  7. 2016年团体程序设计天梯赛-决赛 L1-5. 是不是太胖了(5)

    据说一个人的标准体重应该是其身高(单位:厘米)减去100.再乘以0.9所得到的公斤数.已知市斤是公斤的两倍.现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……) 输入格式: ...

  8. 2016年团体程序设计天梯赛-决赛 L1-3. 出租(20)

    下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声,急问这个怎么破.其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对 ...

  9. 2016年团体程序设计天梯赛-决赛 L1-2. I Love GPLT(5)

    这道超级简单的题目没有任何输入. 你只需要把这句很重要的话 —— “I Love GPLT”——竖着输出就可以了. 所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车. #i ...

随机推荐

  1. windows下使用 linux命令好办法

    1. 安装下载 CygwinPortable一键安装包.7z 2. 把安装路径下/  [D:\cygwinportable\CygwinPortable\App\Cygwin\bin] 加到 Path ...

  2. 协议的分用以及wireshark对协议的识别

    在TCP/IP详解一书中谈到了协议的分用,书中的图1-8如上.图1-8可以很好地解释在互联网的分层结构中,底层的协议头是如何承载上层的不同的协议的.对于链路层而言,以太网首部中有不同帧类型用于表示以太 ...

  3. Oracle中的NVL函数

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  4. QuartzCore笔记

    Quartz Core 图层编程 一.添加 Quartz Core 框架 要使用 Quartz Core 框架,你需要将其添加到你的工程中 . 然后 #import <Quartz Core/Q ...

  5. PAT 1024. 科学计数法 (20)

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位 ...

  6. 040医疗项目-模块四:采购单模块—采购单创建好之后跳转到采购单修改页面(editcgd.action)

    我们上一篇文章写到了要从editcgd.action为入口讲.我们要做的事根据edicgd.acion进入到Action层的一个函数,在这个函数里面要做的就是从数据库中把采购单表里面的数据都查出来显示 ...

  7. Html5 Egret游戏开发 成语大挑战(五)界面切换和数据处理

    经过前面的制作,使用Egret的Wing很快完成了开始界面和选关卡界面,下面通常来说就是游戏界面,但此时界面切换和关卡数据还没有准备好,这次讲解界面的切换和关卡数据的解析.前面多次修改了Main.ts ...

  8. CGI、FastCGI和PHP-FPM关系图解

    CGI.FastCGI和PHP-FPM关系图解   webapp即是php解析器等 当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器.接下 ...

  9. Linux Linux程序练习十四(多进程压力测试)

    /* * 题目: * 编程一个基本多进程测试框架,提示用户输入进程数.和每个进程数运行圈数.(fork) * 进行多进程压力测试.(execve) * 要求父进程能监控所有子进程的退出,避免僵尸进程. ...

  10. Linux shell基础

    shell是核心程序kernel之外的指令解析器,是一个程序,同事是一种命令语言和程序设计语言 --shell是命令解析器,用户输入命令,它去解析. shell类型 ash,bash,ksh,csh, ...