题面 Description 给定一个字符串 ss .现在问你有多少个本质不同的 ss 的子串 t=t1t2⋯tm(m>0)t=t1t2⋯tm(m>0) 使得将 tt 循环左移一位后变成的 t′=t2⋯tmt1t′=t2⋯tmt1 也是 ss 的一个子串. Input 输入仅有一行,一个字符串 s(1≤lens≤300000)s(1≤lens≤300000) .字符串 ss 仅包含小写字母. Output 输出一个整数表示答案. Sample Input (样例输入1) abaac (样例输入…
Description 给你一个无限长的数组,初始的时候都为0,有3种操作: 操作1是把给定区间[l,r][l,r] 设为1, 操作2是把给定区间[l,r][l,r] 设为0, 操作3把给定区间[l,r][l,r] 0,1反转. 一共n个操作,每次操作后要输出最小位置的0. Input 第一行一个整数n,表示有n个操作 接下来n行,每行3个整数op,l,r表示一个操作 Output 共n行,一行一个整数表示答案 Sample Input 3 1 3 4 3 1 6 2 1 3 Sample Ou…
题目描述 给定一个长度为\(L \le 10^9\)的环形赛道, \(n \le 10^5\)个人在上面赛艇. 每个人的速度都不相同, 假如为正则顺时针走, 否则逆时针走. 当两个人相遇时, 他们就会开火, 编号小的那个人就会挂掉出局. 当只剩下一个人时, 这个人就获得胜利. 问: 多久以后游戏结束. Solution 考虑什么时候游戏结束: 最后仅剩的两个人相遇, 则一个挂掉, 另一个胜利. 因此我们只要得到最后是哪两个人相遇即可. 考虑每次相遇的只能是位置相邻的两个人, 因此我们把相邻两个人…
题目大意 给你一个序列\(a_1, a_2, ..., a_n\). 我们令函数\(f(n)\)表示斐波那契数列第\(n\)项的值. 总共\(m\)个操作, 分为以下两种: 将\(x \in [L, R]\)中的所有\(a_x\)加上一个数\(k\); 询问\(\sum_{x \in [L, R]}f(a_x)\) \(n \le 10^5\) \(m \le 10^5\) Solution 我们靠考虑斐波那契数列的转移矩阵: \[ [f_{a + b - 1} \ f_{a + b}] = […
题面 Description 给定一个n个点m条边的连通图,保证没有自环和重边.对于每条边求出,在其他边权值不变的情况下,它能取的最大权值,使得这条边在连通图的所有最小生成树上.假如最大权值为无限大,则输出-1. I nput 第一行两个整数n,m,表示n个点m条边 接下来m行,每行3个整数x,y,z,表示节点x和节点y之间有一条长z的边 Output 输出一行m个整数,表示每条边的答案 Sample Input 4 4 1 2 2 2 3 2 3 4 2 4 1 3 Sample Output…
noip2019集训测试赛(二十一)Problem B: 红蓝树 Description 有一棵N个点,顶点标号为1到N的树.N−1条边中的第i条边连接顶点ai和bi.每条边在初始时被染成蓝色.高桥君将进行N−1次操作,来把这棵蓝色的树变成红色的树.* 选一条仅包含蓝色边的简单路径,并删除这些边中的一条.* 然后在路径的两个端点中间连一条红色的边.他的目标是,对于每一个i,都有一条红色的边连接ci和di.现在请你判断是否可能达成他的目标. Input 题目数据按一下格式从标准输入输出输入: NN…
Problem A: Colorful Balls Description Snuke放了N个一排彩色的球.从左起第i个球的颜色是ci重量是wi她可以通过执行两种操作对这些球重新排序操作1:选择两个相同颜色的球,假如他们的重量和小于等于X,交换两个球的位置操作2:选择两个不同颜色的球,假如他们的重量和小于等于Y,交换两个球的位置求我们总共可以得到多少种 不同的颜色序列?对答案取109+7的模 Input N X Yc1 w1. . .cN wN Output 输出答案. Sample Input…
题目大意 给你一棵树, 每个点有一个点权. 有两种操作: link / cut 修改某个点的点权 每次操作后, 你要输出以下答案: 在整棵树中任意选两个点, 这两个点的LCA的期望权值. Solution 我们考虑每个点作为LCA的概率: \[ P(u为LCA) = \frac{sz[u]^2 - \sum_{v为u的子节点} sz[v]^2}{n^2} \] 所以我们的答案为 \[ \begin{aligned} E &= \frac{\sum_{每个节点u} (sz[u]^2 - \sum_…
Solution 智障暴力题, 每个点维护一下子树信息, 树剖就好了. 我居然还傻了写了一发毛毛虫... #include <cstdio> #include <cctype> #include <vector> #include <algorithm> #include <cstring> #define vector std::vector #define max std::max #define min std::min #define s…
Solution 首先审清题意, 这里要求的是子串而不是子序列... 我们考虑用1表示p, -1表示j. 用sum[i]表示字符串前\(i\)的前缀和. 则我们考虑一个字符串\([L, R]\)有什么要求: \(\forall x \in [L, R]\)满足\(sum[x] \ge sum[L - 1]\). 我们分别从前往后和从后往前求出以每个位置为开头的最长合法子串, 然后扔进树状数组里面查询即可. 至于怎么求以每个位置为开头最长合法子串, 我们考虑用一个单调栈来维护: 从前往后扫每个位置…