51Nod 算法马拉松23 开黑记】的更多相关文章

惨啊……虽然开了半天黑,但是还是被dalao们踩了…… 第二次开黑,还是被卡在rank20了,我好菜啊……= = 写一写比赛经过吧…… 看到题之后习惯性都打开,A~D看上去似乎并没有什么思路,F应该是道数论题,看了E感觉有点意思,一看数据范围,咦怎么只有$50000$,再仔细看一看式子,手动分情况讨论之后得到一个结论—— 这题是水的线段树维护莫队啊= = 然后就开始码码码,由于一些脑残错误调了一会儿,然后就得到了这样的结果: 我坚信自己莫队的复杂度没错,然后就开始各种王逸松卡常,使用的卡常技巧包…
这是一场惨烈的开黑大战,始于全机房开黑指望刷进rank前十拿钱的壮志,终于被各路神犇怒踩成rank20,差点200点头盾不保的落魄,想起将近一年前ad和zcg等学长挤进rank10的壮举,不由得唏嘘,我好菜啊…… 作为我方的MVP,我就写写这次开黑大战的经历吧…… 星期四的时候51Nod大翻车,本来应该周五开始的比赛不小心设成周四开始了,虽然一分多钟之后就关了,不过我正好把后五题都留着了,就把题面存了起来让全机房一块看(然而并没有人去看……包括我……). 星期五的时候比赛重新开始,结果开场不久就…
题目戳这里:51NOD算法马拉松8 某天晚上kpm在玩OSU!之余让我看一下B题...然后我就被坑进了51Nod... A.还是01串 水题..怎么乱写应该都可以.记个前缀和然后枚举就行了.时间复杂度O(N) #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 1000009; char s[maxn]; int sum[maxn], N…
题目链接  51nod 算法马拉松 34  Problem D 在这个题中$2$这个质数比较特殊,所以我们先特判$2$的情况,然后仅考虑大于等于$3$的奇数即可. 首先考虑任意一个点对$(i, j)$,满足$1 <= i <= j <= n$ 我们考虑这个点对对答案的贡献. 首先显然$i$和$j$必须有相同的奇偶性,那么$i + j$一定为偶数. 包含这个点对的有效的质数的区间长度为$[j - i + 1, min(i + j - 1, 2n + 1 - i - j)]$中的所有质数.…
先说说前面的SPOJ-RNG吧,题意就是给n个数,x1,x2,...,xn 每次可以生成[-x1,x1]范围的浮点数,把n次这种操作生成的数之和加起来,为s,求s在[A,B]内的概率 连续形的概率 假设有3步,那整个分布范围相当于一个立体几何图形,上界b和下界a可当成一个x+y+z=a或b的平面看待,算出x<=X1 x>=-X1 y<=X2 y>=-X2 z<=X3 z>=-X3 发现体积就是f(x1,x2,x3)+f(-x1,-x2,x3)+f(-x1,x2,-x3)…
这次打算法马拉松是在星期五的晚上,发挥还算正常(废话,剩下的题都不会= =). 讲讲比赛经过吧. 8:00准时发题,拿到之后第一时间开始读. A配对,看上去像是二分图最大权匹配,一看范围吓傻了,先跳过读后面的题. B完全二叉树的方差,大概看了一遍,好神的样子,跳过. C多项式?好吧没学过FFT和NTT的我肯定不会,跳跳跳. D最大值,哎呦这函数什么破玩意儿,看不懂,跳跳跳. E B君的射击,卧槽毕克大人您出题就算了出这么一道码农题是要闹那样,跳跳跳. F那些年,我们一起讲的故事,卧槽这特么简直就…
OwO 故事的起源大概是zcg前天发现51Nod晚上有场马拉松,然后他就很开心的过去打了 神奇的故事就开始了: 晚上的时候我当时貌似正在写线段树?然后看见zcg一脸激动告诉我第一题有九个点直接输出B就可以A.. 然后之后zcg以奇怪的二分方式发现了如何A掉第一题的第十个点(我记得貌似是什么第5000个数等于511? OwO 就这样没有任何思考含量全凭骗分黑科技过掉了第一题 OwO 然后zcg打开了第二题,发现第二题样例有点问题,然后就发了个帖子,直接去看第三题了 我去瞅了一眼,发现这不是gcd…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1815 tarjan缩点后在DAG上递推即可. 每个点维护所有根到它的路径上的值的最大值,严格次大值,最大的"根到这个点的一条路径中的严格次大值"(也就是答案). 注意所有根到它的路径上的值的严格次大值不是答案. 时间复杂度\(O(n)\). #include<cstdio> #include<bitset> #include<cs…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1765 设答案为\(X\). 则\[X=\frac{m}{n}\times\frac{\sum a_i}{m}+\frac{n-m}{n}\left(\frac{\frac{(n-1)n}{2}-\sum a_i}{n-m}+X\right)\] \[X=\frac{n(n-1)}{2m}\] #include<cstdio> #include<cstring&g…
A题 链接:http://www.51nod.com/contest/problem.html#!problemId=1417 推荐链接:http://blog.csdn.net/a837199685/article/details/45009337 设美女取得正面概率是p,反面就是(1-p),就是美女取一正一反和一反一正的概率相同,然后推出公式y=((a+b)/2+b)/(2*(a+b)); #include<iostream> #include<cstdio> #include…
智力彻底没有了...看来再也拿不到奖金了QAQ... A B君的游戏 因为数据是9B1L,所以我们可以hash试一下数据... #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) using n…
非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模)   Input 一个数n,表示长度.(n<1e15) Output 长度为n的非010串的个数.(对1e9+7取模) Input示例 3 Output示例 7 解释: 000 001 011 100 101 110 111 读完题,这样的题目肯定是能找到规律所在的,要不然数据太大根本无法算.假设现在…
染色问题 基准时间限制:1 秒 空间限制:10240 KB 分值: 40 一个n(3<=n<=100)个点的完全图,现在给出n,要求将每条边都染上一种颜色k(1<=k<=n),最终使得所有三个点构成的环(C(n,3)个不同的换)上三条边的颜色和在所有颜色中任选三种颜色的组合(C(n,3)种方案)一一对应,由你来给出染色方案. 本题有多组数据   Input 第一行一个整数T,表示数据组数 接下来T行每行一个整数n,表示完全图的点数 Output 输出由T个部分组成 每个部分的第一行…
传送门 这题我在比赛的时候竟然没有想出来,真是-- 这道题我们可以想一想怎么搞定获胜的概率p. 我们发现再怎么这个p都是搞不了的.所以我们可以积一下分,然后就可以不用去管p了.我们要做的就是求出一个关于p的多项式. 我们又发现,对于整体的期望,并不好直接表示出来(是可以表示出来的).所以我们就想一想怎么去递推吧. 设f(i,j)表示赢了i场,输了j场的概率(一个关于p的多项式).那么我们就可以列出一个式子: f(i,j)=f(i−1,j)∗p+f(i,j−1)∗(1−p) 然后,我们枚举所有的f…
这次太丢人了只搞出来了A到D,那就将就写一写A到D... A 棋盘问题 脑筋急转弯题,不难发现每一次两个人只能染白奇数个格子,所以数数有奇数还是偶数个白格子就行了. #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i…
A 取余最长路 不难发现路径可以拆成三条线段,只要知道两个转折点的位置就能计算出答案. 设sum(i,l,r)表示第i行从l到r元素的和,则答案可以表示为sum(1,1,x)+sum(2,x,y)+sum(3,y,n)%p. 前缀和一下转化成(S3[n]-S3[y-1])+S2[y]+(S1[x]-S2[x-1])%p,从小到大枚举y,将所有(S1[x]-S2[x-1])扔到一个集合里,用个set就能轻松实现了. 时间复杂度为O(NlogN). #include<cstdio> #includ…
A 第K大区间 不妨考虑二分答案x,则问题转化成计算有多少个区间满足众数出现的次数>=x. 那么这个问题我们使用滑动窗口,枚举右端点,则左端点肯定单调递增,然后维护一个简单的数组就能资瓷添加元素,删除元素,算集合的众数这几项操作了. 时间复杂度O(NlogN). #include<cstdio> #include<cstring> #include<cctype> #include<queue> #include<algorithm> #d…
OTZ做出题目的神犇..断断续续改完了在这里存一下思路吧 A题:第K大区间题意:定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. 分析:二分答案mid,任务就是判定有多少个区间的众数≥mid. #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 100010; int n, A[maxn], c[maxn], cnt[maxn], m…
当时做比赛的时候听说过这类用KD_Tree维护的数据结构题 然后知道是KD_Tree,然而并不知道怎么写QAQ 比赛完了之后%了一发代码 其基本思路是这样的: 1.首先我们把询问[L,R]看成二维平面上的点,那么对于任意修改[p,p] 当且仅当p>=L&&p<=R时会对答案有影响 对应到二维平面就是KD_Tree维护矩形区域和的经典操作啦 2.那么我们考虑对历史最小值的询问 先把修改转换为增量修改 我们可以在KD_Tree上维护两个标记 第一个是当前的ADD 第二个是历史所有的…
题目链接 附一个代码地址 A,这个容斥一下就好了 C,rxd大爷给讲的,首先如果分三种情况(成环,正在比配环,未访问)讨论复杂度是\(3^n * n ^ 2\)的,但是对于每一个环,都可以直接枚举环的最大的那个点,如果闭合就枚举新的最大值,这样就可以转移了,代码见另一个页面,代码也是rxd的QAQ E,好像有个性质就是 \(C(n,k) mod 2 = 1 \Longrightarrow n\text{&}k=k\)…
点进去发现并不是博弈QAQ 一开始考虑单调队列什么乱七八糟的发现根本做不出来 (没错我一直在想枚举最大值求次大值QAQ 不妨换个思路: 我们考虑枚举次大值求最大值 设当前为now, 设now之前第一个比他大的数的位置为L1,L1之前第一个比他大的数的位置为L2 设now之后第一个比他大的数的位置为R1,R1之前第一个比他大的数的位置为R2 那么对于now而言,其作为次大值存在的区间 1.左端点在[L2+1,L1]之间,右端点在[now,R1-1]之间 2.左端点在[L1+1,now]之间,右端点…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - 51Nod1753 题意概括 两个字符串相似定义为: 1.两个字符串长度相等 2.两个字符串对应位置上有且仅有至多一个位置所对应的字符不相同 给定一个字符串,每次询问两个子串在给定的规则下是否相似.给定的规则指每次给出一些等价关系,如‘a'=’b',‘b'=’c'等,注意这里的等价关系具有传递性,即若‘a'=’b',‘b'=’c',则‘a'=’c'. 题解 我们弄一个可以通过前缀求得区间某一个字母的排列的哈…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - 51Nod1952 题意概括 有一个栈,有3种操作: Ο 从栈顶加入一个元素 Ο 从栈底加入一个元素 Ο 从栈顶弹出一个元素 现在,求每次操作后栈内元素的最大值和mod (1e9+7) n次操作,n<=1e7 题解 这题对于博主这样的蒟蒻,做出来了,万分欣喜. 我们在搞一个栈的同时,维护一个单调不降的队列. 然后在弹出栈的时候,如果队尾元素等于当前弹出的元素,那么队尾出队. 至于两种进队,都是最基础的维护队…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - 51Nod1832 题意概括 对于给定的一个二叉树的先序遍历和后序遍历,输出有多少种满足条件的二叉树. 两棵二叉树不同当且仅当对于某个x,x的左儿子编号不同或x的右儿子编号不同. 题解 我们发现,如果两棵二叉树先后序遍历相同,但是形态不同,只可能是某些节点,只有一个子节点,这个子节点在左边和右边都可以的情况. 那么只需要统计这样的节点个数,然后2^tot,高精度即可. 代码 #include <cstrin…
首先将原本字符串hash,注意每一个字母要分开了. 然后并查集判断字符相同,将字符ascll吗乘转化为祖先乘. 然后就可以判断相等的情况. 然后考虑相等的情况. 二分枚举中间点,然后如果左边是不相等并且右边不相等,那么就不是只有一个字符不相等. 否则如果左边不相等判断左边,右边不相等判断右边 时间复杂度:o(nlogn*26) 虽然大约是1e8,而且常数较大,但是有5秒时限 代码: #include<bits/stdc++.h> using namespace std; ],k,T,l1,r2…
题解:水体一枚 按照贪心的思想求出是2的k次方,然后高精度计算 代码: #include<bits/stdc++.h> using namespace std; ; int ans,n,a[N],b[N]; struct zz { int len,a[N]; void init() { memset(a,,sizeof a); len=; } void write(){for (int i=len;i;i--)printf("%d",a[i]);} zz operator…
题解: 按照每一个要求,分类讨论,讨论压下去了多少 代码: #include<bits/stdc++.h> using namespace std; ,N=; int n,A,B,C,ans,x,a,b,M,u[N],v[N],p,k; int main() { scanf("%d%d%d%d%d%d%d%d",&n,&A,&B,&C,&x,&a,&b,&M); ,r=N/-; ;i<=n;i++) {…
装盒子   基准时间限制:1 秒 空间限制:131072 KB 分值: 160 有n个长方形盒子,第i个长度为Li,宽度为Wi,我们需要把他们套放.注意一个盒子只可以套入长和宽分别不小于它的盒子,并且一个盒子里最多只能直接装入另外一个盒子 (但是可以不断嵌套),例如1 * 1 可以套入2 * 1,而2 * 1再套入2 * 2.套入之后盒子占地面积是最外面盒子的占地面积.给定N个盒子大小,求最终最小的总占地面积. Input 第一行一个数N表示盒子的个数. 接下来N行,每行两个正整数,表示每个盒子…
递归   基准时间限制:1 秒 空间限制:131072 KB 分值: 80 函数f(n,m) { 若n=1或m=1返回a[n][m]; 返回f(n-1,m)异或f(n,m-1); } 读入2<=n,m<=100 for i=2->100读入a[1][i] for i=2->100读入a[i][1] 输出f(n,m) 发现当n,m较大时程序变得异常缓慢. 小b经过一番思考,很快解决了这个问题. 这时小c出现了,我将n,m都增加131072,你还能解决吗? 相对的,我会读入2->…
B题(数学题: 问(1+sqrt(2)) ^n  能否分解成 sqrt(m) +sqrt(m-1)的形式  如果可以 输出 m%1e9+7 否则 输出no n<=1e18 刚看题没思路 暴力一下吧 发现根本没有no的情况 那么就好办多了 所求的值序列为 1, 2, 9, 50, 289, 1682, 9801, 57122, 332929, 1940450, 11309769 设(1+sqrt(2)) ^n为 A_n+B_n*sqrt(2) ,则: A_n = A_(n-1)+2*B_(n-1)…