2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring> #include <queue> #include <vector> #include <algorithm> #include <map> #include <iostream> #define inf 0x3f3f3f3f #defin…
2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的,所以要注意去除这个重复部分的. #include<bits/stdc++.h> using namespace std; ; typedef long long ll; ; int main(){ ll n,m,ans=; scanf("%lld%lld",&n,&am…
链接:https://ac.nowcoder.com/acm/contest/3005/F来源:牛客网 题目描述 现有一个 n 个点,n-1条边组成的树,其中 1 号点为根节点. 牛牛和牛妹在树上玩游戏,他们在游戏开始时分别在树上两个不同的节点上. 在游戏的每一轮,牛牛先走一步,而后牛妹走一步.他们只能走到没有人的空节点上.如果谁移动不了,就输掉了游戏.现在牛牛和牛妹决定随机选择他们分别的起点,于是他们想知道,有多少种游戏开始的方式,使得牛牛存在一种一定获胜的最优策略. 两种开始方式相同,当且仅…
链接:https://ac.nowcoder.com/acm/contest/3005/I来源:牛客网 示例1 输入 复制 2 1 1 0 2 2 1 2 1 1 0 2 2 1 输出 复制 1 1 示例2 输入 复制 2 1 1 1 2 2 1 2 1 1 1 2 2 1 输出 复制 0 0 备注: 思路: #include <bits/stdc++.h> #define dbg(x) cout << #x << "=" << x &l…
链接:https://ac.nowcoder.com/acm/contest/3002/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一天,maki拿到了一颗树.所谓树,即没有自环.重边和回路的无向连通图. 这个树有 个顶点, 条边.每个顶点被染成了白色或者黑色. maki想知道,取两个不同的点,它们的简单路径上有且仅有一个黑色点的取法有多少? 注: ①树上两点简单路…
题目描述 哎,又是银首,要是你这个签到题少WA一发就金了 牛牛战队的队员打完比赛以后又到了日常甩锅的时间.他们心情悲伤,吃完晚饭以后,大家相约到一个街机厅去solo.牛牛和牛能进入了一个迷宫,这个迷宫里除了墙壁的阻拦,还会有僵尸的阻拦.情况十分复杂,牛能为了更快的追逐牛牛,迅速放出了大招,让牛牛原地眩晕,而眩晕的解药,也只有牛能自己拥有. 这一个迷宫可以简化为一个$n$行$m$列的矩阵,其中有一些僵尸,这些僵尸会在一个$1*k$的矩形中来回游走.他不会攻击眩晕状态下的人,只会攻击和他抢地盘的人.…
D : 子段异或 考察点 : 位运算,前缀和,异或的性质和应用 坑点 : 0 - L 的异或值是 0 的话也是一个区间 相同的值可能有多个,那么这时候区间就会有多个(x * (x + 1) / 2) 关于异或的性质和应用:https://www.cnblogs.com/prjruckyone/p/12302732.html 侃侃 : 怎么求区间异或值为 0 的区间呢 ? 在求这个之前,可以想一下怎么求区间 和 为 0 的区间呢? 我们知道一个区间和或者区间异或 [L,R] 都可以表示为 sum[…
https://ac.nowcoder.com/acm/contest/3007/I 题中给定的图必定是一棵树 容易发现,如果将输入的N(N-1)个距离看做N(N-1)条无向边的话,那么如果数据合法,原树就是这张新图的最小生成树. 证明:由于边权是非负的,可以考虑Kruskal算法的过程,每一次引入的边都是尽可能短的,所以一定是树中的边,通过简单的归纳即证.   #include<bits/stdc++.h> using namespace std; typedef long long ll;…
https://ac.nowcoder.com/acm/problem/201961 预处理出僵尸走的路径,僵尸走的周期长度应该为2k-2,在普通的bfs基础上加上一维表示时间,从当前位置x,y和和时间t去更新新的x,y和时间t+1,vis数组也是三维的,等于多一层状态进行表示dis数组,把每个状态加入队列,直到到达终点或者队列为空,即可求出最佳答案. #include<bits/stdc++.h> using namespace std; typedef long long ll; stru…
B: 牛牛战队的比赛地(二分做法)题意:二维平面给定n个点,在x轴找一点使得到n个点距离的最大值最小. 思路:我们可以将问题转化为在x轴找到一个圆心,使得该圆包含这n个点且半径最小,这样就变成了最小圆覆盖问题.有关于最大值最小此类问题,我们第一个想到的就应该是二分了,关键在于二分半径后如何check呢?首先我们需要明白这样一个前提,也是解题的关键点:一个半径为R的圆,我们任意在圆上或圆内找一个点,也做半径为R的圆,那么这个圆一定会包含之前那个圆的圆心.明白了这个,问题就easy了,我们将二分得到…