牛客网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\),使得 ...
随机推荐
- Postman 安装与使用
本文是基于 Chrome 浏览器的扩展插件来进行的安装,并非单独应用程序. 1. 官网安装(容易打开出错) 打开官网,https://www.getpostman.com 点击那个灰灰色的「Chro ...
- 整体二分--BZOJ1901: Zju2112 Dynamic Rankings
n<=10000个数有m<=10000个操作,1.询问一个区间的第k小的数:2.单点修改. 带修主席树. 整体二分. 整体二分的必要条件: #include<string.h> ...
- mysql用户自定义变量
可以先在用户变量中保存值然后在以后引用它:这样可以将值从一个语句传递到另一个语句.用户变量与连接有关.也就是说,一个客户端定义的变量不能被其它客户端看到或使用.当客户端退出时,该客户端连接的所有变量将 ...
- PHP上传文件限制修改
php.ini里面查看如下行: upload_max_filesize post_max_size memory_limit
- JDBC示例(增删查改)
前提: 1.项目中引入MySQL的JAR包,POM参考如下配置: <!-- mysql-connector-java --> <!-- http://mvnrepository.co ...
- JSP的安全性
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/security.html: JavaServer Pages和Servlets有几种可用的机制可以使We ...
- linux network name space
linux network namespace概念类似于网络中的 VRF (virtual routing and forwarding).但是,你不知道VRF的概念也没关系,下面我们通过一个简单的介 ...
- xming + putty remote GUI
xming 和putty的配置网上有很多 但是在使用时发现有个问题, 记录一下. 在配置完成后,远程运行图形化程序经常会说can not open display等错误. 这有可能是因为xming的安 ...
- 018 cisco 3560 MAC地址绑定
在3560交换机上show ip dhcp binding 可以看到通过DHCP服务广播出去的IP地址与MAC地址的对应表: 比如: Switch#show ip dhcp binding IP ad ...
- Mac使用技巧之Finder的个人收藏
当使Finder的时候,左側会列出来个人收藏,能够非常方便的打开对应的文件夹.那么怎样把自己新建的文件夹也增加到个人收藏呢? 1.默认的个人收藏 2.新建名字为my_ios_demo文件夹,拖动这个文 ...