题目链接:https://ac.nowcoder.com/acm/contest/879/A 题意:有n个城市,编号1~n,k天,第一天位于城市1,要求最后一天在城市1,且相邻两天不在同一个城市,求方案数. 思路:设k天后在城市1的方案数为f(k),前k-1天每天有n-1种选择,最后一天必须去城市1,即有(n-1)^(k-1)种可能,但是这包括了倒数第二天在城市1的情况.但我们会发现倒数第二天在城市1的方案数即f(k-1),即f(k)=(n-1)^(k-1)-f(k-1). 不访列举前几项: f…
传送门 对分母求一下逆元,把除法取模变成乘法取模,逆元介绍看这里 这种方法只适合模为质数的情况 #include<bits/stdc++.h> using namespace std; ; long long quickpow(long long a, long long b) { ) ; ; a %= mod; while(b) { ) ret = (ret * a) % mod; b >>= ; a = (a * a) % mod; } return ret; } long l…
题目链接:https://ac.nowcoder.com/acm/contest/879/G 题意:给定A1和A数组公式: 以及B数组: 求 思路:利用筛法更新b数组,最后求异或和即可. AC代码: #include<cstdio> using namespace std; ; int n,M,a,b[maxn],ans; int main(){ scanf("%d%d%d",&n,&a,&M); ;i<=n;++i) b[i]=a; ;i&l…
题目链接:https://ac.nowcoder.com/acm/contest/879/B 题意:题目意思就是求ΣC(n,i)pi(MOD+1-p)n-i (k<=i<=n),这里n,i范围为1e5,要用到逆元求组合数. AC代码: #include<cstdio> using namespace std; typedef long long LL; ; ; LL n,k,p,ans; LL inv[maxn],F[maxn],Finv[maxn]; void init(){ i…
[牛客小白月赛21]NC201605 Bits 题目链接 题目描述 Nancy喜欢做游戏! 汉诺塔是一个神奇的游戏,神奇在哪里呢? 给出3根柱子,最开始时n个盘子按照大小被置于最左的柱子. 如果盘子数为偶数,则需要将她们全部移动到最右侧的柱子上,否则将她们移动到中间的柱子上. 那么,Nancy该怎样移动呢?请你输出汉诺塔游戏的过程叭! 输入描述: 共一行:一个整数n 输出描述: 共2^n组:每组n+2行,每行3×(2n+1)+4个字符,用.表示空白区域,用|表示柱子区域,用*表示盘子.组与组之间…
牛客小白月赛16 这个题目我AC之后看了一下别人的题解,基本上都是线段树,不过二分也可以. 这个题目很自然就肯定要对其中一个进行排序,排完序之后再处理另外一边,另一边记得离散化. 怎么处理呢,你仔细想想,找找规律就可以发现,其实我们就是在找递增子序列. 第一次找到的就是重要程度为1 的妹子,然后删除这些元素,继续第二次找,第二次找到的就是重要程度为二的妹子. 所以到每一个点,我们就只要根据它的大小来判断它应该放的位置(尽量靠前,并且小于这个数),然后更新这个位置,再返回这个位置,它所在的位置就是…
求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简单路径).再从找到的点出发,找到据该点的最远点,那么这两点就确定了树的一条直径,两点间距即为所求距离. 无意中看到一道水题,也就是POJ 1383题目中给出了一个无环的迷宫,求出其中最长的一条路我们知道无环图本质上可以认为就是树,所以此题完全可以使用树的最长链算法 即:随便从某个节点C开始DFS或B…
牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数组或者将add标记数组定义为long long型就会超内存,并不是自己的线段树写的有问题,而是出题人故意想卡线段树,就是不想让人家用线段树过这道题,但是还是有很多人用线段树过了,我最后删了add标记数组的初始化就过了,mdzz... 这道题还要记得开long long,其他的就没了,差分数组的没写,…
牛客小白月赛8 - E - 诡异数字 题意: 求区间中,满足限制条件的数字的个数. 限制条件就是某些数字不能连续出现几次. 思路: 比较裸的数位DP, DP数组开一个dp[len][x][cnt] 表示长度为len,x这个数字连续出现cnt次的个数. #include <iostream> #include <algorithm> #include <cstring> #include <string> #include <cstdio> typ…
牛客小白月赛18 Forsaken给学生分组 Forsaken给学生分组 链接:https://ac.nowcoder.com/acm/contest/1221/C来源:牛客网 ​ Forsaken有nnn个学生,每个学生都有一个能力值aia_iai,为了方便管理,Forsaken决定将nnn个学生分成kkk组. ​ Forsaken认为如果一个小组有一个能力在该小组极其突出的学生,这个小组就比较容易管理.我们定义对于teamiteam_iteami来说,这个小组的管理方便度f(i)=max(a…