题目 有一个n个点的无向图,给出m条边,每条边的信息形如\(<x,y,c,r>\) 给出q组询问形如\(<u,v,l,r>\) 接下来解释询问以及边的意义 询问表示,一开始你在点u上,然后按顺序处理编号从l到r的边 对于一条边\(<x,y,c,r>\),你可以进行两种操作: 如果你当前在x点或者y点上,那么你可以走这条边(从x到y或从y到x)并付出c的代价(当然你也可以不走,看操作2) 如果你不走这条边或者不可以走这条边(即你当前不在x或y上),那么你需要付出r的代价询…
题目 给出一个长度为n的序列a[] 给出q组询问,每组询问形如\(<x,y>\),求a序列的所有区间中,数字x的出现次数与数字y的出现次数相同的区间有多少个. 分析 我们可以维护一个前缀和sum,遇到x时加1,遇到y减1. 那么对于区间[l,r],如果sum[r]-sum[l-1]=0,则这个区间合法. 我们可以用桶来求出\(<x,y>\)的合法区间个数. 于是我们\(O(N^3)\)预处理每一个\(<x,y>\): 但是这显然会超时. 因为只有有x和y时位置才是有用的…
题目描述 Description 有一个n个点A+B条边的无向连通图,有一变量x,每条边的权值都是一个关于x的简单多项式,其中有A条边的权值是k+x,另外B条边的权值是k-x,如果只保留权值形如k+x的边,那么这个图仍是一个连通图,如果只保留权值形如k-x的边,这个图也依然是一个连通图. 给出q组询问,每组询问给出x的值,问此时这个无向连通图的最小生成树权值是多少. Input 第一行四个数n,A,B和q 接下来A行,每行三个整数u,v,k,表示u和v之间有一条权值为k+x的无向边 接下来B行,…
题目 分析 对于\[\sum_{i=1}^{n}\lfloor\dfrac{T-B_i}{A_i}\rfloor\] 我们考虑拆开处理,得到 \[\sum_{i=1}^{n}(\lfloor\dfrac{T}{A_i}\rfloor-\lfloor\dfrac{B_i}{A_i}\rfloor)-[T\%A_i<B_i\%A_i]\] 因为\(A_i<=1000\),那么我们可以 对于每个模数\(mo=A_i\) 设S[mo][j],记录B数组中模mo后为j的个数,并且对于S[mo]求一个前缀…
题目 题目大意 给你\(X+Y+Z\)个三元组\((x_i,y_i,z_i)\). 然后选\(X\)个\(x_i\),选\(Y\)个\(y_i\),选\(Z\)个\(z_i\). 每个三元组只能选择其中一个. 问最大的和. 思考历程 想不到贪心-- 于是只能\(DP\)了-- \(DP\)就不用说了吧-- 正解 首先考虑\(X=0\)的情况: 按照\(z-y\)排个序,前面\(Z\)个选择\(z\),后面\(Y\)个选择\(y\). 这就是一个可撤销贪心的思路,可以看成先全部选\(y\),然后选…
题目链接: http://172.16.0.132/senior/#main/show/5437 题目: 题解: 发现满足上述性质并且仅当A序列的子序列的差分序列与B序列的差分序列相同 于是我们把A变成差分序列,把B变成差分序列,做一次KMP就好了 #include<algorithm> #include<cstring> #include<cstdio> #include<iostream> using namespace std; ; int n,m;…
题目 分析 假设答案为ans, 发现\[k=\sum_{i=1}^{min(n,k)}\lfloor \dfrac{ans}{i} \rfloor\] 于是可以对ans进行二分, 用分块来求出上面的式子.与k进行比较. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm…
题目 Y sera 陷入了沉睡,幻境中它梦到一个长度为N 的序列{Ai}. 对于这个序列的每一个子串,定义其幻境值为这个子串的和,现在Y sera 希望选择K 个不同的子串并使得这K 个子串的幻境值之和最大. 然而由于梦境中的种种限制,这些子串的长度必须在L 到R 之间. 你需要告诉她,最大的幻境值之和. 分析 题目要求求出最大的和,那显然就是找出最大的k个子串. 考虑怎么找出最大的k个子串. 我们求一次前缀和,扔进一个可持久化权值线段树上. 然后二分第k大的子串的值mid,枚举子串的开头,对于…
题目 trie 暴力就是对于每个询问的T个字符串 第i个和第i+1个直接个从后暴力枚举每位是否相同, 但这个方法TLE 我们考虑是否可以用更快的方法来求出两个字符串的最长公共后缀. 我们把所有的字符串从后往前扔进trie中,搞个lca就可以了,最长公共后缀就是lca的深度. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <cstrin…
题目 小w 偶然间见到了一个DAG. 这个DAG 有m 层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有k 个节点. 现在小w 每次可以取反第i(1 < i < n - 1) 层和第i + 1 层之间的连边.也就是把原本从(i, k1) 连到(i + 1, k2) 的边,变成从(i, k2) 连到(i + 1, k1). 请问他有多少种取反的方案,把从源点到汇点的路径数变成偶数条? 答案对998244353 取模. 状压dp 考虑用dp, 因为k<=10,而路径数只分奇偶,…