$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]); } }