[SDOI2018]荣誉称号

题解:

并不需要什么算法

首先我们随便画一画就会发现

能画出一颗满二叉树

然后要满足每个点从上往下的路径和都相同(%m意义下)

一个点上可能对应了多个点

然后这样我们可以暴力dp $2^k*m^2+nm$的

应该过不了

我们注意到一个点本质不同的点只能有m个

所以对每个点开个数组记录一下为x的有几个

这样时间就是$2^k*m^2$的了

空间$2^k*m$

原文地址:https://www.cnblogs.com/yinwuxiao/p/10044008.html

时间: 2024-08-06 01:22:55

[SDOI2018]荣誉称号的相关文章

SDOI2018

SD的题有点反人类啊... d1t1[SDOI2018]物理实验 感觉比较好想但不太好写,写了一半弃了 d1t2[SDOI2018]战略游戏 建出圆方树,每次建虚树,答案就是虚树上的原点个数减去询问的点数. 1 //Achen 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdlib> 6 #include<vector> 7 #includ

【荣誉】恭喜Oneself荣获Oracle用户组年轻专家荣誉称号(中国首批)

<[荣誉]恭喜Oneself荣获Oracle用户组年轻专家荣誉称号(中国首批)> 新年新群招募: 中国Oracle精英联盟 170513055群介绍:本群是大家的一个技术分享社区,在这里可以领略大师级的技术讲座,还有机会参加Oracle举办的技术沙龙,与兴趣相投的小伙伴一起笑谈风云起,感悟职场情! 前言今天非常有幸获得"Oracle用户组年轻专家称号" 这里感谢ACOUG提名 感谢jim jiang.Kamus.Eygle 的大力支持,希望2015年大家越来越好~~~下面介

bzoj 5329 [SDOI2018] 战略游戏

bzoj 5329 [SDOI2018] 战略游戏 Link Solution 很容易想到虚树 然后发现是一个图... 现学圆方树,套上去,做完了(模板题?) 就是直接上广义圆方树先把这玩意转换成一棵树,然后对当前询问建立虚树,断掉虚树里任何一个点都合法(包括不出现的点,指那些在某个点和其虚树上父亲之间的点),统计一下即可 Code // Copyright lzt #include<stdio.h> #include<cstring> #include<cstdlib>

[SDOI2018]战略游戏 圆方树,树链剖分

[SDOI2018]战略游戏 这题是道路相遇(题解)的升级版,询问的两个点变成了\(S\)个点. LG传送门 还是先建出圆方树,考虑对于询问的\(S\)个点,答案就是圆方树上能包含这些点的最小连通块中的圆点个数减去\(S\).问题变成了怎样求这样的连通块中的圆点个数,直接给结论吧:先搞出树的dfs序,把询问的点按dfs序从小到大排一遍序,每次把答案加上第\(i\)和第\(i + 1\)个点之间的圆点个数,但是不算lca,再加上第\(1\)个和第\(S\)个点之间的圆点个数,然后除以二就得到了这个

[SDOI2018]物理实验 set,扫描线,旋转坐标系

[SDOI2018]物理实验 set,扫描线,旋转坐标系 链接 loj 思路 先将导轨移到原点,然后旋转坐标系,参考博客. 然后分线段,每段的贡献(三角函数值)求出来,用自己喜欢的平衡树,我选set. 显然答案的一端是小线段的端点. 然后扫描线求出最大的ans. 代码 #include <bits/stdc++.h> using namespace std; const int N=1e5+7; int n,op[N]; long double X[N][2],Y[N][2],x[2],y[2

#LOJ2564 SDOI2018 原题识别 主席树

转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/9057297.html 原题链接: 今天考试考了前天的SDOI考题 天啊我菜爆,只有T2拿了30分 然后考试后半程一直在打T1 觉得考试思路很有意思,于是就顺着打下来了 个人感觉这个是$O(nlogn^{2})$的,但是在loj上我比claris的程序快了1s多,只不过编程复杂度不止翻倍啊…… 下面介绍一下我的解法 其实最早启发我的是链上的部分分 定义$pre_{i}$为i前面最近的和i同色的点的下标,我们把

「SDOI2018」物理实验

题目大意: 这题不好描述,直接看原题吧…… 题解: 很无脑的题……就是卡精度+难写.代码能力还是太差了. 其实可以直接用long double肝过去.但我的代码似乎太丑了,以至于跑得奇慢无比. 代码: #include "bits/stdc++.h" using namespace std; inline int read() { int s=0,k=1;char ch=getchar(); while (ch<'0'|ch>'9') ch=='-'?k=-1:0,ch=g

SDOI2018:原题识别

题解: https://files.cnblogs.com/files/clrs97/old-solution.pdf Code: #include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; typedef long long ll; const int N=100010,M=1010,E=5500000,BUF=10000000,OUT=10000000; unsigned i

Bzoj5332: [Sdoi2018]旧试题

国际惯例的题面首先我们进行一些相对显然的数学变化.解释一下第二行的那个变形,如果一个数是ijk的因数,那么它一定能被分解成三部分分别是i,j,k的因数.我们钦定一个质数只能在三部分的一个中出现.如果一个质数仅在ijk中的一个数中出现这样显然是对的,而在多个中出现的话,它贡献答案的次数为它出现的总次数+1次.而考虑把ijk的乘积分解质因数,然后考虑每个质数的贡献,会发现每个质数贡献答案的次数恰好为它的次数+1次,所以这样是对的.然后就是分析最后的这个公式了.右边的三个小求和号里的东西显然可以大力n