NOIP 模拟 $30\; \rm 毛一琛$】的更多相关文章

题解 \(by\;zj\varphi\) 原题问的就是对于一个序列,其中有的数之间有大小关系限制,问有多少种方案. 设 \(dp_{i,j}\) 表示在前 \(i\) 个数中,第 \(i\) 个的排名为 \(j\)的方案数 方程: \[f_{i,j}=\begin{cases} \sum\limits_{k=j}^{i-1} f_{i-1,k},(p_{i-1}<p_i)\\ \sum\limits_{k=1}^{j-1} f_{i-1,k},(p_{i-1}>p_i)\\ \end{case…
题解 \(by\;zj\varphi\) 如何判断一个集合可以被拆成两个相等的部分? 枚举两个集合,如果它们的和相等,那么他们的并集就是合法的,复杂度 \(\mathcal O\rm(3^n)\) \(\rm\;meet\;in\;the\;middle\) 优化,将序列分成两段,枚举第一段的每个数加到哪个集合,用 \(\rm hash\) 表存一下. 在后半部分扫完后,再扫前面的每个集合,得到答案. 复杂度 \(\mathcal O\rm (3^\frac{n}{2}+6^\frac{n}{2…
题解 \(by\;zj\varphi\) 二分答案,考虑二分背包中的最大值是多少. 枚举 \(p\) 的值,在当前最优答案不优时,直接跳掉. 随机化一下 \(p\),这样复杂度会有保证. Code #include<bits/stdc++.h> #define ri register signed #define p(i) ++i namespace IO{ char buf[1<<21],*p1=buf,*p2=buf; #define gc() p1==p2&&…
\(noip模拟30\;solutions\) 所以说,这次被初中的大神给爆了????? 其实真的不甘心,这次考场上的遗憾太多,浪费的时间过多,心情非常不好 用这篇题解来结束这场让人伤心的考试吧 \(T1\;毛一探\) 其实这个题我本来是考场上就能AC的 不得不说这个\(meet \;in\;the\;middle\)思想真的没谁了. 我在考场上一分钟想出来如何用一个复杂度不确定的办法来搞定他 (这个复杂度最劣是\(\mathcal{O(2^{n+1})}\),但是数据比较善良,给了我75pts…
期望得分:30+90+100=220 实际得分:30+0+10=40 T1智障错误:n*m是n行m列,硬是做成了m行n列 T2智障错误:读入三个数写了两个%d T3智障错误:数值相同不代表是同一个数 既眼瘸又脑残,NOIP这样后悔去吧! T1 n*m网格,有S种颜色. 按从上到下,从左到右的顺序涂色. 相邻的相同色块可得一份,问最大得分 n,S<=100000,m<=4 只有最多4列 1列:顺着涂 2列:先涂可以涂偶数个 3列:先涂%3=0的,然后一个%3=1和一个%3=2的组合,剩余的顺着涂…
又是炸掉的一次考试 T1.方程的解 本次考试最容易骗分的一道题,但是由于T2花的时间太多,我竟然连a+b=c都没判..暴力掉了40分. 首先a+b=c,只有一组解. 然后是a=1,b=1,答案是c-1,不解释. 对于最大的数据,我们可以用exgcd求出一组特解,之后的通解为x+(b/gcd)*k, y+(a/gcd)*k. 求出正整数解的个数即可. 注意有很多特判,慢慢调试就好(改这题的时间比我改T3的时间都长) #include<bits/stdc++.h> #define m 65535…
NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. #   用  户  名   Censoring 记忆的轮廓 雨天的尾巴 总分 1 板B 87 03:20:06 0 03:23:09 100 03:20:42 187 03:23:09 2   100 03:20:20 0 03:20:49 50 03:26:26 150 03:26:26 2   100 03:19:16…
这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照下来.他想让这一段中每个人的身高成等比数列,展示出最萌身高差,但他发现这个太难办到了,于是他决定放低要求,让等比数列的每两项之间可以是不连续的(例如 2,4,16--).可他依然找不到满意的,便再次妥协,使这个等比数列可以是乱序的. 现在请在其中你找出最长的符合要求的一段,使得将这一段排序后为某个公…
题解 \(by\;zj\varphi\) 对于一个数,如果它二进制下第 \(i\) 位为 \(1\),那么 \(\rm x\) 在这一位选 \(1\) 的贡献就是和它不同的最高为为 \(i\) 的数的个数 这个东西很好搞,整一个 \(\rm 01trie\) 就行,每会插入的时候直接统计即可 但是如何求第 \(p\) 位,二分,但每回二分时 \(2^k\) 搜索一遍就超时了,\(\rm meet\;in\;the\;middle\) 发现每一位是相互独立的,也就是说它们之间是不会互相影响的,所以…
T1 毛一琛 考场上打的稳定的$O((2^n)^2)$的暴力.其实再回忆一下上次那道用二进制枚举的题$y$ 就可以知道一样的道理,使用$\textit{Meet In the Middle}$, 按照暴力枚举的思想(就是枚举两个没有交集的子集判断其和是不是相等) 去考虑将整个集合分为两部分,在每一部分分别找任意两个集合能够凑出的和 为了好操作我们找到$1~n/2$的集合中任意两个子集的和,并将其标记,存入$map$ 并使用$vector$对应$sta$及其标记,再在$n/2+1~n$的枚举中 两…
T1 毛衣衬 将合法子集分为两个和相等的集合. 暴力枚举每个元素是否被选,放在哪种集合,复杂度$O(3^n)$.考虑$\textit{meet in the middle}$. 将全集等分分为两部分分别考虑,先$O(3^{\frac{n}{2}})$枚举前一部分的所有情况,记录两个集合的差所对应的状态,然后同样$O(3^{\frac{n}{2}})$枚举后一部分,与前一部分进行匹配即可. $\textit{meet in the middle}$真还挺神的,以后做题要多考虑. $code:$ 1…
教师节快乐: T1:勇士闯魔塔,是一道很裸的莫队题目,但在老师的催促下,出题人@syq同学修改了第一题,使之成了一道送分题,全暴力水过: T2:第二题是一道预处理+分组背包,考试中,忘了分组背包怎么敲,现琢磨出一种算法,不过复杂度比较高就是了,伤感,第二题由于少加了一个判断,只拿了30分,后面的分数没有拿到: T3:oj p1939,总感到这道题的贪心无法实现,于是敲了一个线段树版本,考试完了,发现线段树是绝对不能写这道题的,如果按照暴力,也许能有30,但写了线段树,只拿了5分,这还是没有多组数…
Description 我们看见了一个由 m 行 n 列的 1*1 的格子组成的矩阵,每个格子(I,j)有对应的高度 h[i][j]和初始的一个非负权值 v[i][j].我们可以随便选择一个格子作为起点,然后在接下来的每一步当中,我们能且只能到达与当前格子有边相邻的四个格子中的高度不超过当前格子高度的格子,每当我们到达一个新格子(包括一开始选择的初始格子),我们就能得到该格子的权值分,然后该格子的权值就会等概率变成不比当前的权值大的一个非负权值.每一个格子在满足前面条件情况下,可以走任意多次.我…
问题描述作为一个神秘的电脑高手,Farmer John 用二进制数字标识他的奶牛.然而,他有点迷信,标识奶牛用的二进制数字,必须只含有 K 位“1”(1 <= K <= 10). 当然,每个标识数字的首位必须为“1”.FJ 按递增的顺序,安排标识数字,开始是最小可行的标识数字(由“1”组成的一个 K 位数).不幸的是,他没有记录下标识数字.请帮他计算,第 N 个标识数字(1 <= N <= 10^7). 输入第 1 行:空格隔开的两个整数,N 和 K. 输出如题,第 N 个标识数字…
Description 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是相同的,并且是已知的,但完成不同软件的一个模块的时间是不同的,每个技术人员在同一时刻只能做一个模块,一个模块只能由一个人独立完成而不能由多人协同完成.一个技术人员在整个开发期内完成一个模块以后可以接着做任一软件的任一模块.写一个程序,求出公司最早能在什么时候交付软件. Input 输入…
%liu_runda Orz T1 随 矩阵快速幂结合概率期望 但n3无法承受 利用原根的性质,将乘法转化成加法 就变成循环矩阵n^2了 改题时苦b地卡了关:误把1当成原根的1次方,错误地认为矩阵的阶是mod,mod-1和0取舍不当,大MOD小mod没分清,不取模把longlong加爆... ??什么2b低错都出 T2 单 考试时60暴力没拿稳 一个是因为高斯消元找绝对值最大项时找成了实际值最大项 一个是求lcm时先乘了两个数后除gcd了... 考试时打出了正解 的一半,捞到30分 其实另一半用…
考试时看了看T1,觉得是结论题,推了推没有成果,跑去看第二题, 题意很明确,求过定点的最小环,还没思考解题策略,然后觉得是水题 打了个tarjan找边双(据说会炸但是平均表现良好),在边双里暴力拆边找最短路,就交了 T3看了看觉得暴力10min能拿到手,回去先打了T1的暴力...(什么逻辑我不应该先拿稳再跑吗) 打完T1暴力后想正解失败,强行从nmd改成n^4只为了使dp与d无关,这个智障的工作耗费了大部分时间 交卷前30min,T1进化暴力完成 交卷前10min,T3暴力完成 前10min,自…
今天起来就是虚的一批,然后7.15开始考试,整个前半个小时异常的困,然后一看题,T1一眼就看出了是KMP,但是完了,自己KMP的打法忘的一干二净,然后开始打T2,T2肝了一个tarjan点双就扔上去了,回来接着肝T1,然后就想起之前的一道AC自动机的考试题,正解虽然是AC自动机但是却有人打hash,然后就有人AC了,所以这道题我也鼓起勇气打起来hash,然后,我就开始对拍.重点是我的对拍的暴力程序是从1枚举到n,也是hash,所以高高兴兴的开始对拍,按说这道题我的暴力程序就可以AC(事后证明确实…
#rank3,开心 话说这次考试时,心态并不是很好,考试前一天看了DeepinC大佬的博客,上次他rank15就 感觉炸成那样,那我上次rank30算什么?反正内心虚得一比;昨天晚上做梦梦到自己模拟赛倒数, 起床后很慌,早上到了之后没心情打题,颓了一会博客,早上饭也没好好吃,知道这次达哥出题; 回来后感觉只能打暴力,考前一直在颓博客,学卡常,忽然发现已经开考2min了,旁边cbx已经在 看题了,我急忙打开题,先扫一遍,果然是达哥的题,连暴力都不会打...卡常白学了... 按顺序来,T1先骗到20…
一直没时间写QwQ 于是补一下. Day 1 晚饭吃的有点恶心…… $1s\,2s\,5s$ 还开 -O2 ?? 有点恐怖. T1 猛的一想: 把外面设成一个点, 向入口连一条权为排队时间的边 从出口连一条权为排队时间的边. ××我又审错题了,就只能进出一次=.= 最短路?? 建反图, 然后从终点跑一个 dij 由于点数少,我觉得$N^2$仿佛都能过=.= 起点直接搜,类似$A^*$? 去搜时间允许下的点的$maxsize$ 可以搞个搜索树,这样就可以严格限制为$\Theta(N)$ 于是时间还…
背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较难改,其他的还好... 两位队爷没考,战神也出了点意外,让我们这些菜鸡钻了空子. 多组数据一定要清零 T1 匹配 前言 我就没想到模拟赛会出这种水题,正解的话hash与KMP都可以,只可惜我只留下20分钟给这题,实力有限,时间有限,就草草打了个暴力.出乎意料整到了\(73pts\)属实出乎意料..…
5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[尴尬\(.jpg\)] \(T1\)P3322 [SDOI2015]排序 背景 说实话,看见这题正解是dfs的那一刻,我人都傻了[流泪.jpg] 在讲这题的时候赵队@yspm 类比了线段树的思想%%%%%,在食用本篇题解时可以想一下 解题思路 最基本的一个思想:结果与操作的顺序无关,因为在更换的时候…
5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Prime() { for(int i=2;i<=M;i++) { if(!b[i]) pri[++tot]=i; for(int j=1;j<=tot&&i*pri[j]<=M;j++) { b[i*pri[j]]=true; if(!(i%pri[j])) break; }…
题解 \(by\;zj\varphi\) 发现就是一棵树,但每条边都有多种不同的颜色,其实只需要保留随便三种颜色即可. 直接点分治,将询问离线,分成一端为重心,和两端都不为重心的情况. 每次只关心经过重心的询问,其他询问不管,具体实现就是点分治的套路,每次搜一棵子树,更新标记. 动归有些小细节,尽量边权化点权,不容易出错,式子直接看官方题解. 复杂度 \(\mathcal O\rm(3^3nlogn+3^4q)\) Code #include<bits/stdc++.h> #define Re…
题解 \(by\;zj\varphi\) 发现右端点固定时,左端点的 \(min-max\) 单调递减,且对于 \(or\) 和 \(and\) 相减,最多有 \(\rm2logn\)个不同的值,且相同的值构成一段连续的区间. 那么就可以在最远的,符合答案的第一个区间二分答案. 具体实现可以用一个链表,每次扫一遍合并,并倒着查合法区间,这样就能做到 \(\rm nlogn\). Code #include<bits/stdc++.h> #define ri register signed #d…
题解 \(by\;zj\varphi\) 引理 对于一个和为 \(n\) 的数列,不同的数的个数最多为 \(\sqrt n\) 证明: 一个有 \(n\) 个不同的数的数列,和最小就是 \(n\) 的排列时 \(\frac{n(n+1)}{2}\),是 \(\sqrt n\) 级别的. 那么,直接用 \(set\) 维护一下有多少不同的堆数,再记一个桶维护每种数的堆有多少个,询问时直接二分查找即可. 复杂度 \(\mathcal O\rm(q\sqrt nlogn)\) Code #includ…
题解 \(by\;zj\varphi\) 发现每个点的权值都可以表示成 \(\rm k\pm x\). 那么对于新增的方程,\(\rm x_u+x_v=k\pm x/0\) 且 \(\rm x_u+x_v=s\). 如果 \(x\) 项系数为 \(0\),那么就只需判断 \(\rm x_u+x_v=s\) 有无解. 若不为 \(0\),那么直接解出 \(x_1\) 并判断是否是小数即可. 修改操作就是对一段区间的值加或减,直接树状数组,复杂度 \(\mathcal O\rm((n+q)logn)…
题解 状压 \(\rm DP\). 从 \(1\) 到 \(n\) 一共只要一条路径,那么就是一条链,只要维护一个点集和当前链的末尾就行. 设 \(\rm dp_{i,j}\) 为 \(i\) 的点集末尾为 \(j\) 的最大权. 转移有两种: 在链的末尾加上一个点. 在链的末尾加上一个点集,这个点集就代表无关的联通块只能和答案链最多连接一个点. Code #include<bits/stdc++.h> #define ri register signed #define p(i) ++i n…
题解 \(by\;zj\varphi\) 题意就是维护 \(\rm max\{01mx,01l+01r\}\) 就是最长连续的一段 \(0\),左右 \(0\) 区间的加和. 可以启发式合并,也可以直接线段树合并,复杂度 \(\mathcal O\rm(nlogn)\) Code: #include<bits/stdc++.h> #define ri register signed #define p(i) ++i namespace IO{ char buf[1<<21],*p1…
题解 \(by\;zj\varphi\) 发现当把 \(\rm scale×cos\theta,scale×sin\theta,dx,dy\) 当作变量时只有四个,两个方程就行. 当 \(\rm n\le 500\) 时,可以选取两组进行高斯消元,解出答案后回带. 但当 \(n\) 极大时,采用随机化的做法,每次随机选取两个,这样每次选取不正确的概率为 \(\frac{3}{4}\),选取 50 次后基本就会出答案了. 记得判断 \(\rm sin\) 的正负 Code #include<bit…