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. http协议.md

    该文转自:HTTP协议详解 HTTP协议详解 引言 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这 ...

  2. FSL - MELODIC

    Source: http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/MELODIC; https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/MELODI ...

  3. java多线程系类:基础篇:08之join

    本章,会对Thread中join()方法进行介绍.涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_40)3. join()示例 转载请注明出处:http:// ...

  4. DEDECMS之三 首页、列表页怎么调用文章内容

    一.首页调用 百度了很多,没有找到实际的解决方法,对于直接读取数据库,这种写法不会采取. 后来,仔细考虑,这部分解决的内容不会很多,所以直接使用了简介的内容 方法一(默认长度55) [field:in ...

  5. BZOJ 1016 【JSOI2008】 最小生成树计数

    Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...

  6. eap

    本文介绍了eap  

  7. Java7并发编程实战(一) 守护线程的创建和运行

    Java里有一种特殊的线程叫做守护(Daemon)线程,这种线程的优先级很低,通常来说,当一个应用程序里面没有其他线程运行的时候,守护线程才运行,当线程是程序中唯一运行的线程时,守护线程执行结束后,J ...

  8. sdk墙内更新方法

    因为GFW有“保护”,我们能“安全”的遨游在中华互联局域网内.如何快速地更新sdk,一直是Android开发者的心病.网上流传着五花八门的方法,在这我记录一些我用过的切实可行的方法供给有需要的人.同时 ...

  9. Java:泛型

    一.序言 变化一: 在引入范型之前,Java中的类型分为原始类型.复杂类型,其中复杂类型分为数组和类:引入范型后,一个复杂类型可以细分成更多的类型. 例如,原先的List类型,现在细分成List< ...

  10. jsp实现一条横线中间有字的样式

    实现样式: ---------------------------------------------------- xxxxxx ---------------------------------- ...