国庆贺礼

$DrinkGrass!$竟然考试了???迟到了$10min$

Before

T1

贪心?

T2

规律?

T3

毒瘤?

During

T1

2
2
4 7
1 5
3
1 4
4 6
3 5

 是贪心,

只要让后一个的“浪费”少,

前面留给后面的多即可。

于是$Theta(T N log N)$仿佛可过$N=1e5$

T2

$O(N log mod)$预处理,$Theta(T)$回答……$emm$

我疯了?

应该是吧……

性质($YY$):

$(n!)^2=((n-1)!)^2*n^2$ 显然。

主要要处理分母。

我想可能和样辉三角有关系……

$$C_n^i=C_{n-1}^i+C_{n-1}^{i-1}$$

$$(C_n^i)^2=(C_{n-1}^i)^2+(C_{n-1}^{i-1})^2+2 imes C_{n-1}^{i} imes C_{n-1}^{i-1}$$

所以维护两个东西,一个是平方和,一个是邻项积和。

最后就是两倍邻项积和与两倍平方和。

所以平方转移过来了

$DrinkGrass$

邻项积和如何转移?

继续打表……

$$emm\[50ex]
vdots\[50ex]
$$

$ans=C_n^0 imes C_n^n+C_n^1 imes C_n^{n-1}+cdots$

于是建模,拿两个大小为$n$的集合,一个里面选$i$个,另一个里面选$n-i$个。

仿佛就是$2n$的集合里选$n$个???

$ans$时大时小……

迷……

暴力打错了(身败名裂)

最后还是打出来啦!

T3

我记得我看过马拉车……忘了=。=

把马拉车套在莫队上$qwq$

不过我也只能打暴力辣(都不会打$QAQ$)。

试试 $S^2$ 预处理前缀和?

老感觉“数据结构”是在唬我~~

试试打个双向$hash$?

分治?

After

28
Miemeng 0
03:14:34
100
03:14:34
20
03:14:35
120
03:14:35

总结:

水体……

T1我写的是正解……但是出于某种玄学的原因(不小心删掉了sort……)WA0

T2是一个柿子:$C_{2n}^{n}$又是正解

T3真不是数据结垢,而是真正的数据结构:数组!(其实是$dp$)

UPD咕掉的T3解:

设$dp_{i,j}$

然后上代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#define N 5555
using namespace std;

bool is_ok[N][N];
int ans[N][N];
char st[N];
int main(){
	scanf("%s",st+1);
	int len=strlen(st+1);
	for(int i=1;i<=len;i++)
		is_ok[i][i]=1;
	for(int i=1;i<len;i++){
		is_ok[i][i+1]=st[i]==st[i+1];
	}
	for(int i=2;i<len;i++){
		for(int j=1;j<=len;j++){
			is_ok[j][j+i]=is_ok[j+1][j+i-1]&&st[j]==st[j+i];
			//cout<<j<<" "<<j+i<<" "<<is_ok[j+1][j+i-1]<<endl;
		}
	}
	for(int i=1;i<=len;i++)
		ans[i][i]=1;
	for(int i=1;i<len;i++)
		ans[i][i+1]=2+is_ok[i][i+1];
	for(int i=2;i<len;i++){
		for(int j=1;j+i<=len;j++){
			ans[j][j+i]=ans[j+1][j+i]+ans[j][j+i-1]-ans[j+1][j+i-1]+is_ok[j][j+i];
		}
	}
	int T,a,b;
	scanf("%d",&T);
	for(int i=1;i<=T;i++){
		scanf("%d%d",&a,&b);
		printf("%d
",ans[a][b]);
	}
}
原文地址:https://www.cnblogs.com/kalginamiemeng/p/Exam20191001.html