https://ac.nowcoder.com/acm/problem/200658 f(n) = f(n-1) * f(n-2) * ab ,f的第一项是x,第二项是y. 试着推出第三项是x·y·ab,第四项是x·y2·a2b,第五项是x2·y3·a4b,第六项是x3y5a7b 可以发现x的指数成1 0 1 1 2 3,y的指数0 1 1 2 3 5,a的指数是0 0 b 2b 4b 7b. x和y的指数为斐波那契数列,a的指数规律为,除去系数b,其第n项前两项之和+1. 由于数据范围很大,所…
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/3003/J 题解: #include<bits/stdc++.h> typedef long long ll; using namespace std; ; ; struct segT{ ll l,r; ll dat; }t1[maxn*],t2[maxn*]; //两棵线段树 ll k[maxn],b[maxn]; ll ans; void build1(ll p,ll l,ll r){ t1[p].l = l,t1[…
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43035417 假设有i步选择不动,就有n-i步移动 假设其中又有a步选择往右移,就有n-i-a步左移 所以-m<=a-(n-i-a)<=m 所以(n-m-i)/2<=a<=min{ n-i,(n+m-i)/2 } 令g(i)=Σ C(n-i,a)(3^a)(2^(n-i-a)) 答案=Σ C(n,i)g[i] 考虑如何递推求出g[i] 令f(n,m)…
链接: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想知道,取两个不同的点,它们的简单路径上有且仅有一个黑色点的取法有多少? 注: ①树上两点简单路…
链接:https://ac.nowcoder.com/acm/contest/331/J来源:牛客网 小希最近想知道一个东西,就是A+B=A|B(其中|为按位或)的二元组有多少个. 当然,直接做这个式子对小希来说太难了,所以小希改变了一些条件,她仅想知道其中A,B<N的情况,其中N为2的幂次. 当然,(A=1,B=0)和(A=0,B=1)被认为是不同的二元组.   对于这种问题一点都不懂..... 法1:打表找规律  3^m 法2:二进制分析,每一位只有00, 01,10 这3种情况  举例  …
题目描述 哎,又是银首,要是你这个签到题少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了,我们将二分得到…
题目描述 作为“音乐鉴赏”课的任课老师,你的课程作为刷学分好课一直受到广泛欢迎.但这一学期,学校制定了新的标准,你的课的优秀率(分数超过90分的人数)被限制在10%以下! 为了应对这个调整,你要求所有的同学都写了一篇论文,并使用随机算法打出了0-90之间的分数,分数可能不是整数.这里的随机是指,对于在[0,90]这个闭区间上的任何一对等长的区间,分数出现在其中的概率均是相同的.在期末的分数占比为百分之多少的时候,你的课程优秀率期望恰好在10%?保证所有同学的平时成绩都高于90分. 输入描述: 输…
E:最小表达式 考察点 : 贪心,高精度 坑点 : 高精度一定不要写错,一定一定不要写错 剩下的就是细节问题 侃侃 : 1.字符串长度达到 5e5,如果要涉及到加法,乘法,普通的肯定会爆 long long的,那么就需要用到 高精度了. 2.怎么贪呢 ? 一个数怎么样会最小呢?只有最高位最小,然后次高位较小,这是这个数就应该会最小(可以自己模拟一下) 另外,这个字符串中的所有 '+' 我们肯定都会用到,因为只有这样所得到的和才会更小,所以如果 '+' 有 ans 个,那么我们就可以将所有整个字符…
C:子段乘积 考察点 : 线段树,尺取,乘法逆元 坑点 : 区间要做到不重不漏, long long 侃侃 : 这道题在比赛是写的尺取,但是写了半天发现不好处理除 0 问题(浮点错误),需要用到乘法逆元(就是把除法转换成乘法的 的过程,应该是用到费马小定理),由于这块不太会,就不会搞了.之后看到题解说用线段树才反应过来,确实呀,这明显就是 区间问题,而且线段树的时间复杂度是 logN,完全可以呀,而且也不用处理除 0 问题(因为我们区间里面每个元素都是 乘) 哈哈,还是自己运用的知识不够灵活吧,…
B : 括号序列 考察点 : 栈 坑点 : 只有栈空时才是合法的 Code: #include <stack> #include <cstdio> #include <string> #include <cstring> #include <iostream> #include <algorithm> using namespace std; string str; stack<char>stacks; int main(…
A:欧几里得 考察点 : 递推, gcd 坑点 : long long 这道题题解说的十分详细,是裴波那契的一种变形,只不过换成 gcd 了. Code: #include <cstdio> #include <string> #include <cstring> #include <iostream> #include <algorithm> using namespace std; typedef long long LL; const in…
思路 CODE #include <bits/stdc++.h> #define dbg(x) cout << #x << "=" << x << endl using namespace std; typedef long long LL; template<class T>inline void read(T &res) { ; ;res=c-'; +c-';res*=flag; } namespace…
https://ac.nowcoder.com/acm/contest/3007/E 放下题解 #include<bits/stdc++.h> using namespace std; typedef long long ll; ; ll vis[maxn*],prime[maxn],prime_3[maxn]; ll tot = ; void getPrime(){ memset(vis,,sizeof(vis)); ;i<=maxn;i++){ ] = i*i*i; ;j<to…
https://ac.nowcoder.com/acm/contest/3007/C 将木板按照Xi从小到大排序,将这时的Yi数列记为Zi数列,则问题变成将Zi划分为尽可能少的若干组上升子序列. 根据Dilworth定理,最小组数等于Zi的最长下降子序列长度. 要求最长下降子序列的长度,我们有一种经典的二分优化dp的方法,在这里不再详述. 借助这种做法我们能给出一种构造方法,在求出最小组数的同时得出方案. 将状态数组的每个位置变为栈,用入栈操作代替修改元素操作,即可在求出组数的同时,用这些栈来完…
#include <bits/stdc++.h> #define dbg(x) cout << #x << "=" << x << endl using namespace std; typedef long long LL; ; LL f[maxn]; char ch[maxn]; namespace _buff { << ; char ibuf[BUFF], *ib = ibuf, *ie = ibuf; ch…
https://ac.nowcoder.com/acm/contest/3004/G 发现每个“1”对于它本身位置产生的影响贡献为0,对前面的“1”有产生贡献,对后面的"1"也产生贡献,用三个树状数组去维护,第一个维护“1”的个数,第二个每个“1”的位置,第三个维护“1”的贡献的前缀和,对于每个“1”的贡献,计算出对前面1的贡献和对后面1的贡献,之和在第一个树状数组中更新这个位置1的个数,第二个树状数组中更新这个1的pos,第三个树状数组中就是更新这个“1”对答案的贡献了   #inc…
https://ac.nowcoder.com/acm/contest/3006/B 三分做法 #include<bits/stdc++.h> #define inf 0x3f3f3f3f using namespace std; typedef long long ll; typedef pair<int,int> pll; ; ; ; struct node { double x; double y; }; node s[maxn]; int n; double Calc(do…
题目链接:牛牛的Link Power II 题意:给你一个只含$0$和$1$的串,定义串的$Link$值为串中两个的$1$之间的距离的和,$(u,v)$和$(v,u)$被看认为是同一对,有$m$次操作,每次操作可以把串中某个$1$变为$0$,或者把某个$0$变为$1$,求一开始和每次操作后串的$Link$值. 思路:线段树,维护区间内$1$的数量$cnt.$区间的$Link$值$w.$区间内所有的$1$到区间左边界的距离之和$dl.$区间内所有的$1$到区间右边界的距离之和$dr$,查询时只要输…
https://ac.nowcoder.com/acm/contest/3005/I 又做麻烦了,悲催... 将所有星星按x坐标为第一关键字,z为第二关键字排好序 那么一个z=1的星星匹配的是x比它小的,y比他小但又尽可能大的星星 用线段树维护所有的y坐标 如果z=0,直接把y坐标插入线段树 如果z=1,在线段树中找小于它的y坐标,y又最大的那个星星,线段树中删走 题解直接用的set,而且在x相同时先处理z=1再处理z=0更方便.唉... #include<cstdio> #include&l…
题目描述 牛牛是一名喜欢旅游的同学,在来到渡渡鸟王国时,坐上了颜色多样的火车. 牛牛同学在车上,车上有 n 个车厢,每一个车厢有一种颜色. 他想知道对于每一个正整数 $ x \in [1,\ n] $ 中,集合 $ x \in [1,\ n],\{ (i,\ x,\ j)\ |\ i < x < j,\ l_x \le col_i = col_j \le r_x \} $中包含多少个元素. 换句话说,就是要求每一个车厢两边有多少对颜色相同的车厢,并且这一对车厢的颜色要在$ l_x$到 $r_x…
题目描述 牛牛有一个n*m的迷宫,对于迷宫中的每个格子都为'R','D','B'三种类型之一,'R'表示处于当前的格子时只能往右边走'D'表示处于当前的格子时只能往下边走,而'B'表示向右向下均可以走. 我们认为迷宫最左上角的坐标为(1,1),迷宫右下角的坐标为(n,m),除了每个格子有向右移动以及向下移动的限制之外,你也不能够走出迷宫的边界. 牛牛现在请你设计迷宫,但是要求你设计的迷宫符合他的要求,他要求你设计的迷宫从(1,1)节点移动到(n,m)节点不同的移动序列种类数目$ \equiv k…
链接:https://ac.nowcoder.com/acm/contest/330/H来源:牛客网 Applese 和它的小伙伴参加了一个促销的抽奖活动,活动的规则如下:有一个随机数生成器,能等概率生成 0∼99 之间的整数,每个参与活动的人都要通过它获取一个随机数.最后得到数字最小的 k 个人可以获得大奖.如果有相同的数,那么后选随机数的人中奖.   Applese 自然是最心急的一个,它会抢在第一个去按随机数.请你帮忙计算一下它能够中奖的概率. 仅一行三个正整数 n, k, x,分别表示参…