牛客网NOIP赛前集训营 提高组(第七场)
中国式家长 2
链接:https://www.nowcoder.com/acm/contest/179/A
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
输入描述:
输出描述:
输出一行两个整数代表最终剩下的行动力点数、获得的悟性的点数 如果挖取过程不合法则输出一行-1 -1 挖取不合法有以下几种可能: 1、试图挖取一个没有开启的格子 2、试图重复挖取一个格子 3、行动力小于10的时候尝试挖取一个悟性格 只要挖取过程中的任何一步不合法,挖取过程就不合法
输入例子:
2 2 20
10 0
0 0
1 0
0 0
3
1 1
1 2
2 1
输出例子:
0 20
-->
说明
最后一次挖取时,行动力已经不够了,因此最后一次挖取失败了
/*
一道没什么细节的模拟...
*/
#include<bits/stdc++.h> #define N 207 using namespace std;
int n,m,k,x,y,T,tmp,ans;
int a[N][N],can[N][N],vis[N][N];
int e[][]={{,},{-,},{,},{,-},{,},{,-},{-,},{-,-}}; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
n=read();m=read();k=read();tmp=k;
for(int i=;i<=n;i++) for(int j=;j<=m;j++)
a[i][j]=read();
for(int i=;i<=n;i++) for(int j=;j<=m;j++)
can[i][j]=read();
T=read();int flag=;
while(T--)
{
x=read();y=read();
if(!can[x][y]){flag=;break;}
if(vis[x][y]){flag=;break;}
if(a[x][y]<= && k<){flag=;break;}
vis[x][y]=;
if(a[x][y]<=) k-=,ans+=;
if(a[x][y]>) k+=a[x][y],k=min(k,tmp);
int xx,yy;
for(int i=;i<;i++)
{
xx=x+e[i][];yy=y+e[i][];
if(xx> && xx<=n && yy> && yy<=m) can[xx][yy]=;
}
}
if(flag) {printf("-1 -1\n");return ;}
else printf("%d %d\n",k,ans);
return ;
}
随机生成树
链接:https://www.nowcoder.com/acm/contest/179/B
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
1、1号点是根节点
2、对于2号点到N号点,每个点随机指定一个父亲。i号点(2 <= i <= N)的父亲在i的约数中随机挑选一个。(例如10号点的父亲可以是1号,2号,5号,7号点的父亲只能是1号点)
树生成完之后,牛牛可以计算出这个树有多少个联通块,一个联通块是一些点的集合,需要满足以下两个条件:
1、从集合中任取两个点都满足:两个点颜色相同,且这两个点之间存在一条树边组成的路径,路径上的所有点都和这两个点颜色相同
2、对于集合中的任意一个点和集合外的任意一个点:两点要么不同色,要么不存在一条树边组成的路径使得路径上所有点都和这两个点同色。
牛牛希望计算出生成的树中最多有多少个联通块
输入描述:
第一行一个整数N代表点数
输出描述:
输出一个整数最多有多少联通块
输入例子:
4
1 1 1 2
输出例子:
2
-->
说明
2号点和3号点的父亲一定是1,4号点父亲可能是1或者2,两种情况下联通块数都是2
/*
要求连通块尽量多。
考虑贪心,则当前点如果能连到和它颜色不同的点就对答案有贡献。
对一个点扫他的倍数哦按段是否连边计算答案即可。
*/
#include<bits/stdc++.h> #define N 500001 using namespace std;
int n,m,ans,cnt,flag;
int col[N],vis[N]; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
n=read();
for(int i=;i<=n;i++) col[i]=read();
for(int i=;i<=n;i++) for(int j=i;j<=n;j+=i)
{
if(col[j]!=col[i] && !vis[j]) {vis[j]=;cnt++;}
}
cout<<cnt+<<endl;
return ;
}
洞穴
链接:https://www.nowcoder.com/acm/contest/179/C
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
为了更好的探索洞穴,牛牛向你提出了Q个问题,每个问题给定两个节点a, b以及一个数l, 你需要告诉牛牛是否存在一条开始于a, 结束于b的路径,总长度为l。(路径中可以经过任意点、边多次,但只能沿着单向边给定的方向行走,不允许反向行走)。
代表牛牛的一个询问
50%的数据, 1 <= li <= 100
100%的数据, 1 <= N <= 100, 1 <= M <= 10000, 1 <= Q <= 1000, 1 <= li <= 109 ,1 <= ai, bi, ui, vi <= N
输出描述:
输出Q行依次回答牛牛的Q个询问
每行输出YES或NO,YES代表存在符合条件的路径,NO代表不存在
输入例子:
3 3
1 2
2 3
3 1
3
100 1 1
100 1 2
100 1 3
输出例子:
NO
YES
NO
-->
说明
这个图是一个三元环,从1号点开始走100步之后必定停在2号点上
/*
首先思考暴力怎么写。
f[a][i][b]表示从a到b经i步是否可达。
转移类似floyed ,枚举中间点c,用(f[a][i-1][c] && f[c][1][b])更新。
然后就发现i可以二进制拆分。
f[a][i][b]表示从a到b经2^i步可达,然后数据水就可以过掉这道题了2333
正解:因为f只有0,1两种状态,想到能用bitset优化。
首先预处理 若f[a][j][b]==1 则 f[a][j+1]|=f[b][j]
然后扫一遍各个系答案即可。
复杂度大约是n^3
*/
#include<bits/stdc++.h> #define N 107
#define S 31 using namespace std;
int n,m,u,v,l,a,b,Q;
bitset<N>f[N][],ans,tmp; int main()
{
scanf("%d%d",&n,&m);
for(int i=; i<=m; i++)
scanf("%d%d",&u,&v),f[u][][v]=;
for(int j=; j<=S; j++) for(int i=; i<=n; i++)
{
for(int k=; k<=n; k++)
if(f[i][j][k])f[i][j+]|=f[k][j];
}
scanf("%d",&Q);
while(Q--)
{
scanf("%d%d%d",&l,&a,&b);
ans.reset();ans[a]=;
for(int i=;i<=S;i++)
{
if(!(l>>i))break;
if((l>>i)&)
{
tmp=ans;
ans.reset();
for(int j=; j<=n; j++)if(tmp[j])ans|=f[j][i];
}
}
puts(ans[b]? "YES":"NO");
}
return ;
}
牛客网NOIP赛前集训营 提高组(第七场)的更多相关文章
- 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告
目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...
- 牛客网NOIP赛前集训营-提高组(第二场)A 方差
链接:https://www.nowcoder.com/acm/contest/173/A来源:牛客网 题目描述 一个长度为 m 的序列 b[1...m] ,我们定义它的方差为 ,其中 表示序列的平 ...
- [牛客网NOIP赛前集训营-提高组(第一场)]C.保护
链接:https://www.nowcoder.com/acm/contest/172/C来源:牛客网 题目描述 C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为 ...
- 牛客网NOIP赛前集训营-提高组(第一场)
牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l ...
- 比赛总结——牛客网 NOIP赛前集训营提高组模拟第一场
第一场打的很惨淡啊 t1二分+前缀最小值没想出来,20分的暴力也挂了,只有10分 t2数位dp,调了半天,结果因为忘了判0的特殊情况WA了一个点,亏死 t3emmmm.. 不会 imone说是DSU ...
- 牛客网NOIP赛前集训营-提高组(第一场)B 数数字
数数字 思路: 数位dp 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include< ...
- 牛客网NOIP赛前集训营-提高组(第一场)A 中位数
中位数 思路: 二分答案 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include< ...
- 牛客网NOIP赛前集训营 提高组 第5场 T2 旅游
[题解] 我们可以发现不在最小生成树上的边一定不能多次经过,因为一条不在最小生成树上的边(u,v)的边权比最小生成树上(u,v)之间的路径更长,选择不在最小生成树上的边一定不划算. 我们还需要确定最小 ...
- 牛客网NOIP赛前集训营-提高组(第四场)游记
牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B区间
牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1 \dots a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...
随机推荐
- LaTex/Overleaf使用笔记
1. 添加网页引用 @misc{ r1, author = "Wikipedia", title = "Binary decision diagram --- { ...
- noip模拟赛 旅行
分析:一个贪心的想法是每次找到根的点权和最大的点进行操作,关键是怎么维护.每次找最大值,修改后会对这条链上每个点的子树上的点造成影响,可以用线段树来维护.找最大值就是区间求最大值嘛,对子树进行操作利用 ...
- [NOIP2005] 提高组 洛谷P1053 篝火晚会
题目描述 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了“小教官”.在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会.一共有n个同学,编号从1到n.一开始,同学们按照 ...
- 主席树初探--BZOJ2588: Spoj 10628. Count on a tree
n<=100000的点权树,有m<=100000个询问,每次问两个点间的第k小点权,保证有解,强制在线. 主席上树啦!类似于之前的序列不带修改询问的前缀表示法,现在只要把前缀当成某点到根的 ...
- Linux下汇编语言学习笔记41 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- C#高级编程第9版 第一章 .NET体系结构 读后笔记
.NET的CLR把源代码编译为IL,然后又把IL编译为平台专用代码. IL总是即时编译的,这一点的理解上虽然明白.当用户操作C#开发的软件时,应该是操作已经编译好的程序.那么此时安装在客户机上的程序是 ...
- Arctic Network POJ - 2349
The Department of National Defence (DND) wishes to connect several northern outposts by a wireless n ...
- [bzoj4712]洪水_动态dp
洪水 bzoj-4712 题目大意:给定一棵$n$个节点的有根树.每次询问以一棵节点为根的子树内,选取一些节点使得这个被询问的节点包含的叶子节点都有一个父亲被选中,求最小权值.支持单点修改. 注释:$ ...
- 2、Java并发性和多线程-多线程的优点
以下内容转自http://ifeve.com/benefits/: 尽管面临很多挑战,多线程有一些优点使得它一直被使用.这些优点是: 资源利用率更好 程序设计在某些情况下更简单 程序响应更快 资源利用 ...
- Java正则表达式过滤出字母、数字和中文
原文:http://blog.csdn.net/k21325/article/details/54090066 1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A ...