洛谷 题解 P2119【魔法阵】】的更多相关文章

很好的一道数学推导题 45分做法 \(O(N^4)\) 暴力枚举四个材料 55分做法 从第一个约束条件可得到所有可行答案都是单调递增的,所以可以排序一遍,减少枚举量,可以拿到55分 100分做法 首先可以发现每个x都小于n,而n最大值只是15000,所以可以开一个桶来存每个魔法值出现的次数 回忆一下3个约束条件 \(xa<xb<xc<xd\)① \(xb-xa=2(xd-xc)\)② \(xb-xa<(xc-xb)/3\)③ 现在魔改一下这三个式子 设\(t=xd-xc\) 所以②…
P2119 魔法阵 题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有m个魔法物品,编号分别为1,2,...,m.每个物品具有一个魔法值,我们用Xi表示编号为i的物品的魔法值.每个魔法值Xi是不超过n的正整数,可能有多个物品的魔法值相同. 大魔法师认为,当且仅当四个编号为a,b,c,d的魔法物品满足xa<xb<xc<xd,Xb-Xa=2(Xd-Xc),并且xb-xa<(xc-xb)/3时,这四个魔法物品形成了一个魔法阵,他称这四个魔法物…
题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有mm个魔法物品,编号分别为1,2,...,m1,2,...,m.每个物品具有一个魔法值,我们用X_iXi​表示编号为i的物品的魔法值.每个魔法值Xi是不超过n的正整数,可能有多个物品的魔法值相同. 大魔法师认为,当且仅当四个编号为a,b,c,da,b,c,d的魔法物品满足x_a<x_b<x_c<x_d,X_b-X_a=2(X_d-X_c)xa​<xb​<xc​<xd​,Xb​…
https://www.luogu.org/problemnew/show/P4891 一道几乎一样的题http://210.33.19.103/contest/1130/problem/3 题面https://files.cnblogs.com/files/hehe54321/2019%E7%9C%81%E9%80%89%E8%81%94%E5%90%88%E8%AE%AD%E7%BB%8310.pdf.zip (这题看了题解后做的)题解(这个站看上去有点像那种爬虫站,并没有在原博客上找到,可…
这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include<cstdio> #include<cstring> #include<iomanip> #include<algorithm> using namespace std; ][];//霸气的开始潇洒自信 ; ,m=-; void ac(int x,int y) {…
原题链接  https://www.luogu.org/problemnew/show/P2119 YY同学今天上午给我们讲了这个题目,我觉得她的思路很好,特此写这篇博客整理一下. 50分:暴力枚举 四重 for 循环分别枚举每个物品作为A物品,B物品,C物品,D物品的情况,看看能否满足题目中给出的三个式子,满足的话对应物品的次数加一就好啦: 100分:数学做法 我们回过头来看上面的三个式子: 对于第一个式子,我们可以按照魔法值从低到高来选择物品: 由第二,三个式子我们可以得到: 我们可以画一个…
必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 LibreOJ #141034 #2359. 「NOIP2016」天天爱跑步 Accepted 100 2454 ms 72492 KiB C++ / 6.3 K hkxadpall 2018-07-28 16:12:23 Vijos 5b5c3486d3d8a169f1b83bb0  P2004 天天爱跑步…
题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=3064 分析 其实我是在看吉司机线段树课件时看到这题很感兴趣就跑过来做 显然如果数据小一点可以用分块什么的比较好搞 但是这个数据范围可能用\(log N\)的数据结构更舒服一点 怎么搞呢?请阅读国家集训队2016论文集之<区间最值操作与历史最值问题--杭州学军中学 吉如一>,对,就是我们敬爱可亲的吉…
题面 首先我们可以发现,在每一次 BFS 时按照 \(A→B→C\) 的顺序枚举遍历肯定是字典序最小的. 然后就是普通的 BFS 了. 我们考虑使用 \(\text{STL map}\) 来存储起点状态到当前状态所需的最少步数,以及到达它的上一个状态与上一个操作代号. 具体实现可参考代码. #include <bits/stdc++.h> using namespace std; int n, m; string start = "12345678", endd; //起始…
同步题解 题目翻译(可能有童鞋没读懂题面上的翻译) 给你三张牌0,1,2. 最初选一张,然后依次进行n次交换,交换规则为:中间一张和左边的一张,中间一张和右边一张,中间一张和左边一张...... 最后问牌x在哪个位置. OK懂了吗?这就是样例中两个数的来历QAQ. 然后我们来找找规律: 我们可以发现:0,1,2这三个数可以经过变化变成如下的情况: {0,1,2},{1,0,2},{1,2,0},{2,1,0},{2,0,1},{0,2,1}, //上为六种情况. {0,1,2} //最后一个循环…
同步题解 题目 好吧,来说说思路: 1.先读入啦~(≧▽≦)/~啦啦啦 2.判断a[i]赛前赛后是否同分数,如果分数不同,则输出,return 0 . 3.如果同分数,则判断a[i]赛前(或赛后)是否小于a[i+1]赛前(或赛后).其实只要比较一个,想一想,为什么? 4.如果不满足第3步,则标记为maybe,但只要第3步满足过一次,则不执行第4步. 过程讲完了,上代码!(步骤见注释) #include<bits/stdc++.h> #define reg register #define in…
蒟蒻发题解了 说明:此题我用的方法为桶排(我翻了翻有人用了桶排只不过很难看出来,可能有些重复的,这个题只是作为一个专门的桶排来讲解吧) (不会算抄袭吧 ‘QWaWQ’) 简单来说(会的人跳过就行): 桶排就是开两个数组,其中一个用来输入以及存储样例数列,另一个用来排序: 排序方法:(我用的第二个数组为b数组) b[a[i]]=a[i]b[a[i]]=a[i] 核心代码(我认为的),先翻译一下:b数组为存储的那个桶,在b数组中第a[i]项的值为a[i]的值, 这样等到下一个a[i]与b[a[i]]…
题目传送门:链接. 能自己推出正确的式子的感觉真的很好! 题意简述: 求\(\sum_{i=1}^{n}gcd(i,n)\).\(n\leq 2^{32}\). 题解: 我们开始化简式子: \(\sum_{i=1}^{n}gcd(i,n)\) \(=\sum_{j=1}^{n}\left(j\times\sum_{i=1}^{n}\left[gcd(i,n)=j\right]\right)\) \(=\sum_{j=1}^{n}\left(j\times\sum_{i=1}^{n}\left[g…
题目大意:给一棵树,路径加,子树求和 题解:树剖 卡点:无 C++ Code: #include <cstdio> #include <iostream> #define maxn 100010 int head[maxn], cnt; struct Edge { int to, nxt; } e[maxn << 1]; inline void add(int a, int b) { e[++cnt] = (Edge) {b, head[a]}; head[a] = c…
链接:https://www.luogu.org/problemnew/show/P2865 题目描述 Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best friends. She does not want to get to her old home too quickly, because she likes the scenery along the way. S…
原题传送门:https://www.luogu.org/problemnew/show/P1209 首先,这是一道贪心题.  我们先来分析它的贪心策略.  例如,样例:  4 50 18  3 4 6 8 1415 16 17 2125 26 27 30 31 40 41 42 43  它们之间的差是:  1 2 2 6 1 1 1 4 4 1 1 3 1 9 1 1 1  既然我们要让木板长度最小,那么我们就得空出前m-1个最大的区域,把其他区域累加,再加上一个m(例如3~8的差是8-3=5,…
题目背景 SHOI2012 D2T3 题目描述 Harry Potter 新学了一种魔法:可以让改变树上的果子个数.满心欢喜的他找到了一个巨大的果树,来试验他的新法术. 这棵果树共有N个节点,其中节点0是根节点,每个节点u的父亲记为fa[u],保证有fa[u] < u.初始时,这棵果树上的果子都被 Dumbledore 用魔法清除掉了,所以这个果树的每个节点上都没有果子(即0个果子). 不幸的是,Harry 的法术学得不到位,只能对树上一段路径的节点上的果子个数统一增加一定的数量.也就是说,Ha…
本蒟蒻又来发题解了, 看到这个题目,本蒟蒻直接开始推公式.. 嗯,可以通过弧长,推出弦长(l = 2 * r * cos(90 * l / (r * Π)); 然后对比各条弦长的平方和与直径的平方. 就可以了 QwQ 以上纯属瞎掰,回到正题 在我写完上面那种算法,然后苦苦调不出的时候. 我开始,怀疑我是不是思路有问题. 事实证明,好像确实有问题: 以上纯属瞎掰,回到正题+1 我们想一想,矩形有什么性质: 四个角都是直角. 嗯,如果在一个圆周内,什么样的角才是直角. 嗯,直径所对应的圆周角肯定是直…
本蒟蒻又来发题解啦! 这个题的正解应该是贪心 直接找题目的关键: 韵脚只可能是 "AABB", "ABAB", "ABBA" 和"AAAA"中的一种 我们来观察韵脚,是不是都是2个'A'和2个'B'; 'AAAA'可以看作'A'与'B'相同 那么现在不就是个简单的贪心了吗? 如果有两个出现2个相同的数字就ans++ 上代码: #include<bits/stdc++.h>//万能头 using namespace…
我又双叒叕被包菜辣! 题目 这道题是不久前的考试题,现在来水一篇题解 扯回正题 题目很明显的告诉你了,这是一个等差数列, 然后,还告诉你了首项, 第二项, 项数. 你还想咋滴 告诉了你首项和第二项,相减不就是公差? 现在,你知道了你个等差数列的首项,公差和项数,要你求它各个项的和.套公式就行了啊 先摆出公式: 公式一:Sn = (a1 + an) × n / 2; 公式二:Sn = n × a1 + n × (n - 1) × d / 2; 我们看看应该用哪个公式? 因为我们已知n, d, a1…
一.声明 在下面的描述中,未说明的情况下,\(N\) 是顶点数,\(M\)是边数. 二.判负环算法盘点 想到判负环,我们会想到很多的判负环算法.例如: 1. Bellman-Ford 判负环 这个算法在众多算法中最为经典,复杂度 \(O(N\times M)\) 2. SPFA 判负环 然而,这个算法是 Bellman-Ford 算法的队列优化版,这最短路方面卓有成效,但在判负环方面不见得有多少快.尽管在有负环的情况下会快很多,期望复杂度达到了 \(O(K\times M)\) (\(K\)是常…
吐槽一下这道题: 数据太水了!!! 请注意,这题如果你考虑了犯规的情况,那么你的分数...可能会和我一样,只有40分. 也就是说,这是一篇AC不了这道题的题解!!! 现在,我来讲一下这道题的正解: 两个变量 less 和 color: less 记录剩余颜色为 color 的球的个数,且场上没有颜色比 less 小的球. 由题意,当场上没有红球时,第单数个球必须是红球 当场上有红球时,第双数个球必须是彩球,且击打不消耗个数. 当 less 为 0 时,less = 0, color++; 给出处…
题解:P1287 盒子与球 不了解的:stirling数(斯特林数) - 百度百科 分析如下: 设有n个不同的球,分别用b1,b2,--bn表示.从中取出一个球bn,bn的放法有以下两种: 1) bn独自占一个盒子:那么剩下的球只能放在m-1个盒子中,方案数为:f(n-1, m-1) 2) bn与别的球共占一个盒子:那么可以事先将b1,b2,--bn-1这n-1个球放入m个盒子中,然后再将球bn可以放入其中一个盒子中,方案数为 :m*f(n-1,m) 3) 边界条件 a) 盒子数 < 0(盒子数…
题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都有一种颜色.这8种颜色用前8个正整数来表示.可以用颜色的序列来表示一种魔板状态,规定从魔板的左上角开始,沿顺时针方向依次取出整数,构成一个颜色序列.对于上图的魔板状态,我们用序列(1,2,3,4,5,6,7,8)来表示.这是基本状态. 这里提供三种基本操作,分别用大写字母“A”,“B”,“C”来表示(可以通过这些操作改…
潇洒の开始 第一步:食用头文件和定义变量, 变量干什么用的说的很清楚 #include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,p,c,i,j,x,y,t,min1,head,tail,tot,u; ][],b[],dis[],num[],w[][],team[];//team为队列,dis为距离,num为邻接点个数,a存相邻点 ];//exist是存在的意思,确定某…
题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状态.操作的方式有两种:  (1)任选一行,改变该行中所有灯泡的状态,即亮的变暗.暗的变亮:  (2)任选两列,交换其位置.  当然并不是任意的两种状态都可以通过若干操作来实现互相转化的.  你的任务就是根据给定两个魔板状态,判断两个状态能否互相转化. 输入格式 文件中包含多组数据.第一行一个整数k,表示有k组数据. …
[题意] 输入一个\(C\)个点\(S\)条边 \((C<=100)\) \((S<=1000)\)的无向带权图,边权表示该路径上的噪声值.当噪声太大时,耳膜可能会收到损伤,所以当你从某点去往另一个点时,总是希望路上经过的噪声最大值最小.输入一些询问,每次询问两个点,求出这两点间最大噪声值最小的路径.输出其最大噪声值 [算法] \(Floyd\) [分析] 本题的做法十分简单:直接用\(Floyd\)算法,但是要把\(+\)改成\(min\),\(min\)改成\(max\). 为什么可以这样…
[题意] 平面上有\(n(n<=1000)\)个点,你的任务是让所有n个点联通.为此,你可以新建一些边,费用等于两个端点的欧几里得距离平方.另外还有\(q(q<=8)\)个套餐可以购买,如果你购买了第\(i\)个套餐,该套餐中的所有结点将变得相互连接.第\(i\)个套餐的花费为\(C_i\). [算法] \(Kruskal\) [分析] 最容易想到的算法是:先枚举购买哪些套餐,把套餐中包含的权值设为\(0\),然后求最小生成树.由于枚举量为\(O(2^q)\),给边排序的时间复杂度为\(O(n…
看还没有人发记搜的题解,赶紧来水发一篇 我们定义dp[i][j]为区间i~j内最少添加几个括号才能把这个串变成正规括号序列. 考虑四种情况 i>j不存在这种子串,返回0 i==j子串长度为1无论是"[","]","(",")"都是要消耗1的,返回1 s=(s')或s=[s']那么返回的是DP(i+1,j-1) 其他情况,枚举断点,详见代码 至于输出嘛.....不会,看紫书的,输出代码的解释看看楼上吧,这里就不详细解释了…
并查集大难题. 看了题解之后才有思路,调了很久很久才AC,当然要写一篇题解来纪念一下. 先来分析一下这些指令的特点,很容易发现对于每个M指令,只可能一次移动整个队列,并且是把两个队列首尾相接合并成一个队列,不会出现把一个队列分开的情况,因此,我们必须要找到一个可以一次操作合并两个队列的方法. 再来看下C指令:判断飞船i和飞船j是否在同一列,若在,则输出它们中间隔了多少艘飞船.我们先只看判断是否在同一列,由于每列一开始都只有一艘飞船,之后开始合并,结合刚刚分析过的M指令,很容易就想到要用并查集来实…