题目大意
给出一个长度为$n$的序列A。如果序列A不是非降的,你必须从中删去一个数,重复这一操作,直到A非降为止。求有多少种不同的操作方案,答案模$10^9+7$。
在你的帮助下,Winedag 愉快地在 deadline 前造完了他的题目。
虽然 Winedag 非常牛逼,但 Wetmath 还是要求他参加模拟考试。
Winedag 要考的题目一共有$n$道,对于第$i$道题,如果AC了,那么得分为$i$,否则得分为$1$,这套题的得分为所有题的得分的积,如果没有AC任何题,那么得分为$1$。
就在Winedag准备切题如麻的时候,突然想起了一个事情,之前有人告诉他:在评测结束以后,会有一个小斗士来把所有分数不为完全平方数的人的程序删掉,分数变为$0$分。
Winedag 想知道他有多少种方案能得到他能得到的最高分,但是他忙于写代码,所以他只能来找你帮忙。
方伯伯正在做他的Oj。现在他在处理Oj上的用户排名问题。
Oj上注册了$n$个用户,编号为$1\sim n$,一开始他们按照编号排名。方伯伯会按照心情对这些用户做以下四种操作,修改用户的排名和编号:
- 操作格式为$1 \ x \ y$,意味着将编号为$x$的用户编号改为$y$,而排名不变,执行完该操作后需要输出该用户在队列中的位置,数据保证$x$必然出现在队列中,同时$y$是一个当前不在排名中的编号。
- 操作格式为$2 \ x$,意味着将编号为$x$的用户的排名提升到第一位,执行完该操作后需要输出执行该操作前编号为$x$用户的排名。
- 操作格式为$3 \ x$,意味着将编号为$x$的用户的排名降到最后一位,执行完该操作后需要输出执行该操作前编号为$x$用户的排名。
- 操作格式为$4 \ k$,意味着查询当前排名为$k$的用户编号,执行完该操作后需要输出当前操作用户的编号。
但同时为了防止别人监听自己的工作,方伯伯对他的操作进行了加密,即将四种操作的格式分别改为了:
$1 \ x+a \ y+a$
$2 \ x+a$
$3 \ x+a$
$4 \ k+a$
其中$a$为上一次操作得到的输出,一开始$a=0$。
例如:
上一次操作得到的输出是$5$
这一次操作的输入为:$1 \ 13 \ 15$
因为这个输入是经过加密后的,所以你应该处理的操作是$1 8 10$
现在你截获丁方伯伯的所有操作,希望你能给出结果。
前天在做一道回文自动机题的时候,发现自己不会写Manacher了。于是重新学了一遍。
话不多说,直接贴链接,讲得很好我也就没什么要补充的了。
另外,时间复杂度显然是$O(n)$的。
下面是 HDU3068最长回文 的代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#include<bits/stdc++.h>
using namespace std;
const int maxn=110005*2;
char tmp[maxn];
int n,f[maxn];
string s;
int main() {
while(~scanf("%s",tmp)) {
int len=strlen(tmp);
s.clear();
s.push_back('#');
for(int i=0; i<len; i++)s.push_back(tmp[i]),s.push_back('#');
n=s.length();
int Max=0,id=0,ans=0;
for(int i=1; i<=n-2; i++) {
f[i]=Max>i?min(f[2*id-i],Max-i):1;
while(i-f[i]>=0&&i+f[i]<n&&s[i-f[i]]==s[i+f[i]])f[i]++;
if(f[i]+i>Max) {Max=f[i]+i;id=i;}
ans=max(ans,f[i]-1);
}
printf("%d\n",ans);
}
return 0;
}
小明有一套玩具卡片。这套卡片中,有$n$张是数字卡片,这$n$张数字卡片上分别写有一个正整数$1,2,\ldots,n$;还有若干张符号卡片,每张符号卡片上写有符号$\underline +,\underline -,\underline{*},\underline(,\underline)$之一。
小明最喜欢用这套卡片来摆算式,然后计算它的结果。当然,摆算式时不必用完所有的卡片。
一天,小明摆好了一个算式。然而,准备计算前,一个熊孩子把算式中的数字卡片全部取走了,只剩下符号卡片和原来数字卡片所在的空位。也就是说,现在的算式可能是这样的:(_+_*_)*(_*_-_)+_(这里_代表原来放有数字卡片的空位)。
无奈小明已不记得原来每个位置填的数字卡片上的数分别是多少,他只能假设每
种可能的算式作为原算式的概率相等。现在,小明想知道,原算式的结果的期望值是多少?
形式化地,设有$m$种可能的算式,它们的运算结果分别为$s_1,s_2,\ldots,s_m$,那么原算式的结果的期望值$E$为