【洛谷P1483】序列变换】的更多相关文章

https://www.luogu.org/problemnew/show/P1483 数据范围不是太大. 一个数组记录给k,记录每个数加了多少. 对于查询每个数的大小,那么就枚举每个数的因子,加上这个每个因子假的数. #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <queue&g…
洛谷 P1032 字符变换 题目描述 已知有两个字串 A,B 及一组字串变换的规则(至多 6 个规则): A1​ -> B1​ A2​ -> B2​ 规则的含义为:在 A 中的子串 A1​ 可以变换为 B1​ , A2​ 可以变换为 B2​ …. 例如: A =' abcd ' B =' xyz ' 变换规则为: ‘ abc ’->‘ xu ’‘ ud ’->‘ y ’‘ y ’->‘ yz ’ 则此时, A 可以经过一系列的变换变为 B ,其变换的过程为: ‘ abcd ’…
P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的数列只能出现修改前的数. 输入输出格式 输入格式: 第一行输入一个\(n\),表示有\(n(n \leq 5\times10^5)\)个数字. 第二行输入\(n\)个整数,整数的绝对值不超过\(10^9\) 输出格式: 输出一个数,表示最少的操作次数 发现之前洛谷做过一个类似的..P2893 che…
洛谷题目链接:序列排序 题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? 输入输出格式 输入格式: 第一行,一个整数N. 第二行,N个整数,表示小C的序列. 输出格式: 一行,一个整数,表示小C需要的最小代价. 输入输出样例 输入样例#1: 6 8 4 5 3 2 7 输出样例#1: 34 说明 数据范围: 对于30%的数据,1<=N<=10: 对于全部的数据,1&l…
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 (这题看了题解后做的)题解(这个站看上去有点像那种爬虫站,并没有在原博客上找到,可…
洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性质,这时候需要冷静想想有没有可利用的地方.蒟蒻一开始往势能线段树上面想了想. 定义一个全局势能函数,为所有\(C_i<B_i\)的位置个数.注意两个操作的修改都不会小于原来的数. 一个是改\(A\),相当于对\(C\)进行区间设置,此时我们每暴力找到一个原来\(C_i<B_i\)但是现在\(C_i…
题目大意:给定一个长度为 N 的序列,有 M 个操作,支持将下标为 x 的倍数的数都加上 y,查询下标为 i 的元素的值. 题解:由于查询操作很少,相对的,修改操作很多.若直接模拟修改操作,即:枚举倍数,容易超时.现考虑记录下每次 x 位置的修改值,每次查询一个位置时,只需枚举这个位置的约数,将这个位置所有约数处的修改加入答案贡献即可. 代码如下 #include <bits/stdc++.h> #define fi first #define se second #define pb pus…
题目大意:对于一个顺序序列,求一个合法置换,可以满足一些约束,若存在多个合法置换,则输出字典序最小的一个置换. 题解:对于序列的置换是否有解的问题,可以和二分图的完美匹配相关联.由于是字典序最小,显然需要贪心考虑.在匈牙利算法执行的过程中,对于每个点来说,可以优先匹配符合条件的最小的点:对于左边点集来说,可以从后往前进行匹配,这样可以保证字典序小的点更可能抢到字典序小的点. 代码如下 #include <bits/stdc++.h> #define pb push_back #define a…
这是一道二分图匹配的题 先%dalao博客 建图并没有什么难的,但是关键在于如何使字典序最小. 一个很显然的想法是先求出一个完美匹配,然后从x集合的第一个元素开始,如果该元素匹配的较小的一个,那么继续,如果是较小的一个,那么强制把它转换成较小的一个,然后在其之后,寻找增广路,如果能找到的话,就修改,如果没有,取消修改. 然而这样的时间复杂度比较高,我们可以采取一种比较高效的贪心. 倒着匹配 即从x集合的最后一个元素开始匹配,最后得到的就是字典序最小的. 那么为什么这样是对的呢? 我们可以发现,总…
传送门 我可能真的只会网络流……二分图的题一点都做不来…… 首先每个位置有两种取值,所以建一个二分图,只要有完美匹配就说明有解 考虑一下每一个位置,分别让它选择两种取值,如果都不能形成完美匹配,说明无解 然后考虑要让字典序最小.考虑一下匈牙利的过程,我们每一次如果遇到右边的点有匹配,我们都会让它把那个匹配给挤掉 那么我们考虑倒着做,这样的话每一次都必定是字典序小的挤掉字典序大的,可以保证最优 //minamoto #include<iostream> #include<cstdio>…
P1631 序列合并 236通过 657提交 题目提供者xmyzwls 标签堆 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 为什么不行? 题目描述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 输入输出格式 输入格式: 第一行一个正整数N: 第二行N个整数Ai,满足Ai<=Ai+1且Ai<=10^9; 第三行N个整数Bi, 满足Bi<=Bi+1且Bi<=10^9. [数据规模] 对于50%的数据中,满足1<…
气死了,FFT了半天发现是NTT... 1004535809 这个东西是NTT模数,原根为3. 题意:给定集合,元素的大小不超过M.用这些元素组成长为n的序列,要求乘积模M为k,求方案数. n <= 1e9,M是质数 解:有一个10分的暴力DP... 正解首先考虑加起来模M为k. 我们可以考虑构造多项式f(x),第i项表示i是否在集合内. 那么答案就是(f(x))n的第k项系数.多项式快速幂. 这个东西的长度可能会很长,那么我们每次乘完之后就把多于M项的系数全部模到小于M. 然后这道题求的是乘积…
P1430 序列取数 题目描述 给定一个长为\(n\)的整数序列\((n<=1000)\),由\(A\)和\(B\)轮流取数(\(A\)先取).每个人可从序列的左端或右端取若干个数(至少一个),但不能两端都取.所有数都被取走后,两人分别统计所取数的和作为各自的得分.假设\(A\)和\(B\)都足够聪明,都使自己得分尽量高,求\(A\)的最终得分. 输入输出格式 输入格式: 第一行,一个正整数\(T\),表示有\(T\)组数据.\((T<=100)\) 接着\(T\)行,每行第一个数为\(n\)…
正解:莫队/线段树+扫描线 解题报告: 传送门! 似乎是有两种方法的,,,所以分别港下好了QAQ 第一种,莫队 看到这种询问很多区间之类的就会自然而然地想到莫队趴?然后仔细思考一下,发现复杂度似乎是欧克的,而且好像也是能做的,那就试着做下呗 首先考虑到怎么从[l,r]转移到[l,r+1],可以想到这个之间的增量=就是区间内最小值之和,于是用个st表搞rmq就好,这里具体港下QwQ 首先如果已经求出来了[l,r]内部的最小值的位置pos,这里不过多阐述了rmq就成了 那么分情况讨论下咯 如果a[r…
题目描述 给定一个由n个整数构成的序列,你需要对它进行如下操作: 操作1:输入格式“1 x y”,表示把所有a[kx](k为正整数,kx<=n)都加上y. 操作2:输入格式“2 j”,表示输出a[j]. 输入输出格式 输入格式: 第一行,两个数n,m,表示有n个数,m条操作. 第二行,n个数a[1],a[2],…,a[n]. 接下来m行,为m条操作. 输出格式: 输出若干行,每行对应一次操作2. 输入输出样例 输入样例#1: 5 4 6 9 9 8 1 2 4 1 2 5 1 3 1 2 4 输…
题目传送门 题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? 输入输出格式 输入格式: 第一行,一个整数N. 第二行,N个整数,表示小C的序列. 输出格式: 一行,一个整数,表示小C需要的最小代价. 输入输出样例 输入样例#1: 复制 6 8 4 5 3 2 7 输出样例#1: 复制 34 说明 数据范围: 对于30%的数据,1<=N<=10: 对于全部的数据,1&l…
题目大意:给定一个序列$s$,每个人每轮可以从两端(任选一端)取任意个数的整数,不能不取.在两个人都足够聪明的情况下,求先手的最大得分. 题解:设$f_{i,j}$表示剩下$[i,j]$,先手的最大得分.令$sum_{i,j}=\sum\limits_{k=i}^j s_k$ $$\therefore f_{i,j}=sum_{i,j}-\min\{\min\limits_{k=j-1}^i f_{i,k},\min\limits_{k=i+1}^j f_{k,j},0\}$$ 这是$O(n^3…
题目描述 有n个函数,分别为F1,F2,-,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个). 输入输出格式 输入格式: 输入数据:第一行输入两个正整数n和m.以下n行每行三个正整数,其中第i行的三个数分别位Ai.Bi和Ci.Ai<=10,Bi<=100,Ci<=10 000. 输出格式: 输出数据:输出将这n个函数所有可以生成的函数值排序后的前m个元素.这m个数应该输出到一行,用空…
https://www.luogu.org/problemnew/show/P1631 序列a中每个数首先都和序列b中的最小元素配对(虽然好像不是很必要这么早插进来?) 每次从堆顶取出最小的和输出答案,然后尝试为这个ai配对下一个bj,要是没有的话--说明都是他一个人贡献完了. #include<bits/stdc++.h> using namespace std; typedef long long ll; int n; int a[100005]; int b[100005]; struc…
https://www.luogu.org/problemnew/show/P2127 感觉题解里写的比较复杂,可能自己的想法比较简单一点吧. 看这个图中的的点如果形成一个环,贪心的考虑,要想花费最少,那么我们一定要多次利用最小那个点. 图中来看就是2和6交换,然后2和4交换,然后就交换完了. 然而还有一种换法就是,这个环中最小的点和序列中最小的点先交换,然后在进行环内的操作(就是说先2和1交换...). 所以对于每个点dfs找到环,然后判断两种方法哪种更优,统计答案. #include <al…
题意简述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 题解思路 大根堆,先存入n个和,再比较大小,改变堆中元素. 代码 #include <cstdio> #include <algorithm> using namespace std; int n, a[100001], b[100001], ans[100001]; int cnt, heap[100001]; void up(int x); void down(in…
题目链接 https://www.luogu.org/problemnew/show/P1032 本题是一道bfs问题,从a串开始,每一步完成替换一对字符串(但是一个一步替换可以将这对字符串替换好几次,比如a串是 ABCABCABCABC 一对替换是BC替换成ED,那么一步替换是将 ABCABCABCABC 替换成 AEDAEDAEDAED )如果十步以内转换成b就输出 本题还让蒟蒻学习了一下map的用法 真的十分好用 c++的stl真是A题利器 具体放代码吧: #include<bits/st…
正解:线段树 解题报告: 传送门! 通过这题我get了一个神奇的,叫,线段树五问的东西hhhh 听起来有点中二但感觉真正做题的时候还是比较有用的,,,?感觉会让条理清晰很多呢,所以放一下QwQ →每个区间需要记录哪些值 →需要哪些标记 →如何叠加标记 →如何对区间进行整体修改 →如何合并区间 然后感觉按照这个思路想题挺好,写题解就jio得太僵硬了,,,思路不连贯,所以就还是不按照一问一答的方式理思路了QAQ 就直接考虑怎么解决两个修改操作和一个查询操作趴 有一定思维难度的应该在查询操作,先说下趴…
传送门 这题纯暴力竟然能过…… //minamoto #include<cstdio> #include<iostream> #define mul(a,b) (1ll*a*b%P) using namespace std; #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) <<],*p1=buf,*p2=buf; int read…
如果按照http://www.cnblogs.com/hehe54321/p/loj-1031.html的$O(n^3)$做法去做的话是会T掉的,但是实际上那个做法有优化的空间. 所有操作可以分解为由两步组成的操作:第一步是在数列的某一端取一个数并加到自己的得分上,第二步是把下一步操作的权利给自己或对方.如果这次操作的前一次是对方的操作,那么在左端或右端取数没有限制:如果这次操作的前一次是自己的操作,那么必须与上一次在相同的一端操作. 令ans[l][r][0/1/2]表示l到r的子序列,上一次…
传送门 解题思路 首先读入a.b数组后,sort一遍(从小到大),然后把a[1]+b[1],a[2]+b[1],a[3]+b[1]……a[n]+b[1]全部加入一个优先队列q(小根堆). 然后从一到n循环,每一次取出队列中的最小的元素(假设是a[i]+b[j]),输出数值,然后把数值修改为a[i]+b[j+1],存入队列. 为什么呢? 很显然,我们把所有可能的情况列成一张表: a[1]+b[1],a[2]+b[1],a[3]+b[1],……,a[n]+b[1]; a[1]+b[2],a[2]+b…
题目描述 分析 操作一.二.三为珂朵莉树的基本操作,操作四.五.六稍作转化即可 不会珂朵莉树请移步至这里 求和操作 把每一段区间分别取出,暴力相加 ll qh(ll l,ll r){ it2=Split(r+1),it1=Split(l); ll ans=0; for(it=it1;it!=it2;it++){ ans=(ans+(it->r-it->l+1)*it->val)%mod; } return ans; } 赋值操作 直接调用\(Assign\)函数将其推平即可 void A…
洛谷题目链接:[NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中Ai可正可负. 一个"超级和弦"由若干个编号连续的音符组成,包含的音符个数不少于L且不多于R.我们定义超级和弦的美妙度为其包含的所有音符的美妙度之和.两个超级和弦被认为是相同的,当且仅当这两个超级和弦所包含的音符集合是相同的. 小Z决定创作一首由k个…
洛谷题面传送门 u1s1 在我完成这篇题解之前,全网总共两篇题解,一篇使用的平衡树,一篇使用的就是这篇题解讲解的这个做法,但特判掉了一个点,把特判去掉在 BZOJ 上会 WA 一个点. 两篇题解都异常简略,前一篇题解甚至只有代码没有说明,所以这里我来写篇比较详细题解造福人类了(大雾 建议没做过这题的同学先看看这道题,看题解区第一个做法,对这题有比较大的启发. 注:下文中分别用 \(a,b,l,r\) 代替题面中的 \(X,Y,A,B\). 首先关于这题咱们可以想到一个非常 naive 的 DP,…
题目: 洛谷3648 注:这道题洛谷3648有SPJ,要求输出方案.BZOJ3675数据组数较多但不要求输出方案. 分析: 这可能是我第三次重学斜率优化了--好菜啊 这道题首先一看就是个DP.稍微推一推类似下面这种式子就会发现事实上结果和切的顺序无关 \[a(b+c)+bc=ab+c(a+b)=ab+ac+bc\] 那么就可以用\(f[i][j]\)表示切了\(j\)次,最右一次在\(i\)后面切的最大值.用\(sum[i]\)表示原序列前\(i\)个数之和,那么就有了这个DP方程(假设在\(i…