[解题报告] 洛谷 P3492 [POI2009]TAB-Arrays 这题是我随机跳题的时候跳到的.写完这道题之后,顺便看了一下题解,发现只有一篇题解,所以就在这里顺便写一个解题报告了. 首先当然是题目链接 顺便贴一下csdn的网址 题目描述 给出两个n*m的矩阵,保证每个矩阵内元素互不相同且权值均在[-10^6,10^6]之间,请能否把其中一个矩阵通过若干次交换两行或者交换两列的操作变成另外一个矩阵. 输入输出格式 输入格式 第一行是一个整数T,表示有T组数据. 每一组数据的第一行是两个整数…
P3486 [POI2009]KON-Ticket Inspector 题目描述 Byteasar works as a ticket inspector in a Byteotian National Railways (BNR) express train that connects Byteburg with Bitwise. The third stage of the BNR reform (The never ending saga of BNR reforms and the Bi…
0 题面 题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7= 2^2+2+2^0 (2^1用2表示) 3=2+2^0 所以最后137可表示为: 2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如: 1315=2^10 +2^8 +2^5 +2+1 所以1315最后可表示为: 2(2(2+2(0))+2)+2(2(2+2(0…
题面 这是CDQ入门题,不要被题目名骗了,这核心根本不在不在FFT上啊=.= 因为后面的项的计算依赖于前面的项,不能直接FFT.所以用CDQ的思想,算出前面然后考虑给后面的贡献 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ,mod=; *N],b[*N],rev[*N],f[N],g[N],n,G,Gi; void exGCD(int a,int b,int &a…
题面 线段树·二重标记(什么鬼 用(a,b)标记表示先执行+a操作,然后对b取max,维护历史/当前最大值和历史/当前标记.然后我们发现区间加$x$就是$(x,-inf)$,区间赋$x$就是$(-inf,x)$.标记有两种更新,一种是和当前的标记合并,一种是更新历史标记. 把一个标记tag合并进当前标记ntag,显然新标记即 $(ntag.a+tag.a,max(ntag.b+tag.a,tag.b))$ 把历史标记htag用一个标记tag更新更简单,其实就是对应取max 那么就可以做了:修改标…
题面 重(新)学点分治中...... 普通的点分治一般这几步: 1.找重心 2.从重心开始DFS,得到信息 3.统计经过重心的路径 4.分别分治几棵子树,继续这个过程 然后是常见的(制杖的我的)一些疑问 1.这么统计不会漏吗 不会,你递归进子树的时候经过当前重心的已经统计完了,分别统计子树就行 2.这么统计不会重吗 不会,因为你进子树不会往回走(这俩都是啥问题啊...) 3.复杂度? $O(n\log n)$,根据重心的性质可得 这个题把所有路径排个序然后双指针扫即可,复杂度$O(n\log n…
题面 初见K-D Tree 其实这样的题(欧几里得距离第$x$近点对)不应该用K-D Tree做,因为会被构造数据卡成$O(n^2)$,随机的另说. 但是并没有找到合适的K-D Tree的题(区域统计),于是就凑活着写了,代码极丑预警 // luogu-judger-enable-o2 #include<queue> #include<cstdio> #include<cctype> #include<cstring> #include<algorit…
题面 设$dp[i][j]$表示容量为$i$时的第$j$优解,因为是优解,肯定$dp[i][j]$是随着$j$增大不断递减的,这样的话对于一个新加进来的物品,它只可能从两个容量的转移的前$k$优解中转移过来,所以每次用两个指针扫一下转移过来就好了. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ,K=; int vol[N],val[N],tmp[K],dp[N][…
题面 在树上建主席树...... 每个点从父亲那里建过来,最后建出来就是从根到$i$这条链上的主席树,查询的时候一边差分一边查询 ($cmt[u]+cmt[v]-cmt[lca(u,v)]-cmt[anc[lca(u,v)]]$) #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ,K=; *N],goal[*N]; int siz[N],anc[N],dep[N],i…
题面 初见莫比乌斯反演 有一个套路是关于GCD的反演经常设$f(d)=\sum_{gcd(i,j)==d},g(d)=\sum_{d|gcd(i,j)}$,然后推推推 $\sum\limits_{i=1}^n\sum\limits_{j=1}^m[gcd(i,j)==prime]$ $\sum_{p∈prime}f(p)$ $\sum_{p∈prime} \sum_{d=1}^{min(n,m)} [p|d] μ(\frac{d}{p})g(d)$ 套路的,改为枚举$\frac{d}{p}$ $…