比赛

题目:第 46 届 ICPC EC Final(正式赛)

榜单

A. DFS Order

签到题

容易发现对于一个点,它的最小位置就是从根走一条链直接到它,最大位置就是除了它的子树,其它全已经走过了。

\[minpos=depth[i] , maxpos=n-size[i]+1
\]

其中\(depth[i]\)表示结点\(i\)的深度,\(size[i]\)表示以结点\(i\)为根的子树大小。

代码:

点击查看代码
#include<cstdio>
#include<cstdlib>
#define maxn 100010
using namespace std;
int deep[maxn],sz[maxn];
int fst[maxn],to[maxn<<1],nxt[maxn<<1],cnt=0;
void add(int x,int y){
to[++cnt]=y;
nxt[cnt]=fst[x];
fst[x]=cnt;
}
void dfs(int x,int fa){
int i;
deep[x]=deep[fa]+1;
sz[x]=1;
for(i=fst[x];i;i=nxt[i]){
if(to[i]==fa) continue;
dfs(to[i],x);
sz[x]+=sz[to[i]];
}
return;
}
int main(){
int i,j,T,n,x,y;
scanf("%d",&T);
while(T--){
cnt=0;
scanf("%d",&n);
for(i=1;i<=n;++i) fst[i]=0;
for(i=1;i<n;++i){
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
dfs(1,0);
for(i=1;i<=n;++i){
printf("%d %d\n",deep[i],n-sz[i]+1);
}
}
// system("pause");
return 0;
}

I. Future Coder

签到题+1

这个式子\(a_i*a_j<a_i+a_j\)很难看,所以我们把它变成\((a_i-1)*(a_j-1)<1\)

方便起见我们读入之后直接把\(a\)数组每个元素全部\(-1\),于是要求\(a_i*a_j<1\)的数对有多少。

然后就简单了,考虑到都是整数,有\(a_i*a_j\leq 0\),于是对于后缀统计一下正数负数和\(0\)的数量就行。

代码:

点击查看代码
#include<cstdio>
#include<cstdlib>
#define maxn 1000010
#define ll long long
using namespace std;
int a[maxn],pre_neg[maxn],pre_zero[maxn];
void solve(){
int n,i,j;
ll sum=0;
scanf("%d",&n);
for(i=1;i<=n;++i) scanf("%d",&a[i]);
for(i=1;i<=n;++i) a[i]--;
for(i=1;i<=n;++i){
pre_neg[i]=pre_neg[i-1]+(a[i]<0),pre_zero[i]=pre_zero[i-1]+(a[i]==0);
}
for(i=1;i<=n;++i){
int neg=pre_neg[n]-pre_neg[i],zero=pre_zero[n]-pre_zero[i];
int pos=n-i-neg-zero;
if(a[i]>0) sum+=zero+neg;
else if(a[i]==0) sum+=n-i;
else sum+=zero+pos;
}
printf("%lld\n",sum);
return;
}
int main(){
int i,j,T,n,x,y;
scanf("%d",&T);
while(T--){
solve();
}
// system("pause");
return 0;
}

L. Fenwick Tree

简单题,但需要一点思维



我们搭出一个树状数组,考虑树状数组的update函数是沿怎样的路径更新的:

手玩一下就会发现,\(update\)函数相当于对从树根到\(i\)这条路径做了区间加(\(val\)值任意实数)。

注意一点,如果\(j\)是\(i\)的祖先,那么以\(i\)为根的子树内部的所有update操作对\(i\)和\(j\)的影响是一样的。

接着我们从底向上考虑,首先叶子如果是\(0\),必然啥都不干;叶子是\(1\),有一个从根到叶区间加,\(ans++\),同时发现这一操作影响到了该叶子的父节点,

我们把父节点的\(a[fa]\)标记加一,表示对于\(fa\)节点,多了一个影响它的子树。

再考虑中层节点,如果节点\(x\)对应的

\(c[x]==1\),且\(a[x]==0\),说明它的子树没影响它,需要进行\(x\)到根的区间加,\(ans++\)。

\(c[x]==1\),且\(a[x]>0\),说明有一个或多个子树中的操作对它有影响,那么必然可以调整每个操作的\(val\)值使得它们和非零,\(ans\)不变。

\(c[x]==0\),且\(a[x]==0\),啥都不用干,\(ans\)不变。

\(c[x]==0\),且\(a[x]>0\),这就有点意思了,要分类讨论下。直接上结论,当且仅当\(a[x]==1\)时我们需要一次\(x\)到根的区间加把它变回去,\(ans++\)。

(其实也好想,只要\(a[x]>=2\)就能调整\(val\)使得对\(x\)的影响之和为\(0\))。

代码:

点击查看代码
#include<cstdio>
#include<cstdlib>
#define maxn 100010
using namespace std;
char s[maxn];
int a[maxn];
int lowbit(int x){
return x&(-x);
}
void solve(){
int n,i,j,ans=0;
scanf("%d%s",&n,s+1);
for(i=1;i<=n;++i) a[i]=0;
for(i=1;i<=n;i<<=1){
for(j=i;j<=n;j+=(i<<1)){
if(s[j]-'0'){
if(j+lowbit(j)<=n) a[j+lowbit(j)]++;
if(!a[j]){
ans++;
}
}
else{
if(a[j]==1){
ans++;
}
}
}
}
printf("%d\n",ans);
return;
}
int main(){
int i,j,n,m,T;
scanf("%d",&T);
while(T--){
solve();
}
return 0;
}

【补题】第 46 届 ICPC EC Final的更多相关文章

  1. 2020 ICPC EC Final西安现场赛游记

    也不知道从何说起,也不知道会说些什么,最想表达的就是很累很累. 从第一天去的时候满怀希望,没什么感觉甚至还有一些兴奋.到后来一直在赶路,感觉很疲惫,热身赛的时候觉得马马虎虎,导致热身赛被咕.然后教练就 ...

  2. 第46届ICPC澳门站 K - Link-Cut Tree // 贪心 + 并查集 + DFS

    原题链接:K-Link-Cut Tree_第46屆ICPC 東亞洲區域賽(澳門)(正式賽) (nowcoder.com) 题意: 要求一个边权值总和最小的环,并从小到大输出边权值(2的次幂):若不存在 ...

  3. 第 46 届 ICPC 国际大学生程序设计竞赛亚洲区域赛(沈阳)

    有时候,很简单的模板题,可能有人没有做出来,(特指 I ),到时候一定要把所有的题目全部看一遍 目录 B 题解 E F 题解 H I 题解&代码 J B 输入样例 3 2 1 2 1 2 3 ...

  4. ICPC南京补题

    由于缺的题目比较多,竟然高达3题,所以再写一篇补题的博客 Lpl and Energy-saving Lamps During tea-drinking, princess, amongst othe ...

  5. 第十届山东省acm省赛补题(1)

    今天第一场个人训练赛的题目有点恐怖啊,我看了半个小时多硬是一道都不会写.我干脆就直接补题去了.... 先补的都是简单题,难题等我这周末慢慢来吧... A Calandar Time Limit: 1 ...

  6. ACM ICPC China final G Pandaria

    目录 ACM ICPC China final G Pandaria ACM ICPC China final G Pandaria 题意:给一张\(n\)个点\(m\)条边的无向图,\(c[i]\) ...

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

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

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

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

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

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

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

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

随机推荐

  1. cs231n__5.1/5.2 CNN

    CS231n note 5.1 CNN_history now: 略 5.2 CNN 上节课我们谈到了全连接层的概念: 对于全连接层而言,我们要做的就是在这些向量上进行操作. 例如: 但是至于卷积层, ...

  2. c#5.0(.net 4.5之后)的 Async+await+Task的异步机制的调试笔记

    1.)无返回值的情况(异步也是基于线程). using System; using System.Collections.Generic; using System.Linq; using Syste ...

  3. [OpenCV实战]37 图像质量评价BRISQUE

    摄影是全世界数百万人最喜爱的爱好.毕竟,这有多难啊!用美国著名摄影师阿巴斯•黛安娜的话来说: 拍照就像深夜踮着脚尖走进厨房,偷奥利奥饼干. 拍照很容易,但是拍一张高质量的照片却很难.它需要良好的组成和 ...

  4. [编程基础] C++多线程入门7-条件变量介绍

    原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++11标准. 文章目录 7 条件变 ...

  5. awk 入门

    参考资料:awk从放弃到入门(1):awk基础 (通俗易懂,快进来看)-朱双印博客 (zsythink.net) awk系列博文直达链接:AWK命令总结之从放弃到入门 我们先来用专业的术语描述一下aw ...

  6. [BUUCTF]洞拐洞拐洞洞拐

    [BUUCTF] 洞拐洞拐洞洞拐 问题链接:https://buuoj.cn/challenges#洞拐洞拐洞洞拐 问题附件是一张图片. 一. 图片分析 查看图片,发现是由有规律的黑白像素构成的PNG ...

  7. Ubuntu下的LGT8F328P MiniEVB Arduino开发和烧录环境

    基于 LGT8F328P LQFP32 的 Arduino MiniEVB, 这个板型资料较少, 记录一下开发环境和烧录过程以及当中遇到的问题. 关于 LGT8F328P 芯片参数 8位RISC内核 ...

  8. 基于 .NET7.0 开发Telegram 机器人(入门)

    简介 Telegram(非正式简称TG.电报)是跨平台的即时通信软件,其客户端是自由及开放源代码软件,但服务端是专有软件.用户可以相互交换加密与自毁消息,发送照片.视频等所有类型文件.官方提供手机版( ...

  9. OpenMP Parallel Construct 实现原理与源码分析

    OpenMP Parallel Construct 实现原理与源码分析 前言 在本篇文章当中我们将主要分析 OpenMP 当中的 parallel construct 具体时如何实现的,以及这个 co ...

  10. 浪 - Java

    如果你的计算机还没有安装 Java, 这篇说明很适合你. OpenJDK 下载地址 历史版本归档 环境配置 cd ~/.local wget https://download.java.net/jav ...