20210927上午
为啥要在没有
S
P
J
SPJ
SPJ的网站出
S
P
J
SPJ
SPJ的题啊。。。
T1 | T2 | T3 | T4 | T5 | |
---|---|---|---|---|---|
预测 | 100 | 100 | 100 | 0 | 100 |
一测 | 50 | 100 | 100 | 0 | 0 |
T1:
我单调栈竟然写挂了555
关键要修改弹出后的位置,就是单调栈模板。
while(scanf("%lld",&n)&&n)
{
top=ans=0;
for(ll i=1;i<=n;i++) scanf("%lld",&h[i]);
h[++n]=-1;
for(ll i=1;i<=n;i++)
{
if(!top||h[i]>=h[sta[top]]) {sta[++top]=i;continue;}
for(;top&&h[i]<h[sta[top]];top--) ans=max(ans,(i-sta[top])*h[sta[top]]);
h[sta[++top]]=h[i];
}
printf("%lld\n",ans);
}
T2:
经典树形
d
p
dp
dp,
f
i
,
0
/
1
f_{i,0/1}
fi,0/1分别表示选或不选,初始化
f
i
,
0
=
0
f_{i,0}=0
fi,0=0,
f
i
,
1
=
s
i
f_{i,1}=s_i
fi,1=si,转移则有
f
i
,
0
=
∑
max
(
f
j
,
0
,
f
j
,
1
)
f_{i,0}=\sum \max(f_{j,0},f_{j,1})
fi,0=∑max(fj,0,fj,1),
f
i
,
1
=
∑
f
j
,
0
f_{i,1}=\sum f_{j,0}
fi,1=∑fj,0,答案即为
max
(
f
r
t
,
0
,
f
r
t
,
1
)
\max(f_{rt,0},f_{rt,1})
max(frt,0,frt,1)。
T3:
筛法筛出质数,每个质数在
N
!
N!
N!中出现的次数为
∑
i
=
1
p
i
≤
N
⌊
N
p
i
⌋
\sum_{i=1}^{p^i\le N}\lfloor{\frac{N}{p^i}}\rfloor
∑i=1pi≤N⌊piN⌋。
T4:
欧拉回路板子题,因为
A
O
J
AOJ
AOJ上没
S
P
J
SPJ
SPJ战况惨烈,
U
O
J
UOJ
UOJ上倒是过了,每次走过一条边记得将其删掉(可通过修改
f
i
r
s
t
first
first指针实现,不然会被自环卡的怀疑人生。
T5:
其实是区间
d
p
dp
dp,因为没有初始化壮烈牺牲。
定义
f
i
,
j
f_{i,j}
fi,j表示将
i
−
j
i-j
i−j的括号合法化所需加的最小括号数,显然有
f
i
,
i
=
1
,
f
i
,
j
=
0
if i>j
f_{i,i}=1,f_{i,j}=0 \ \ \text{if i>j}
fi,i=1,fi,j=0 if i>j
然后每次区间转移,即
f
i
,
j
=
min
(
f
i
,
j
,
f
i
+
1
,
j
−
1
)
if
s
i
与
s
j
可
以
配
对
f
i
,
j
=
min
(
f
i
,
j
,
f
i
,
k
+
f
k
+
1
,
j
)
f_{i,j}=\min(f_{i,j},f_{i+1,j-1}) \ \ \text{if }s_i与s_j可以配对 \\f_{i,j}=\min(f_{i,j},f_{i,k}+f_{k+1,j})
fi,j=min(fi,j,fi+1,j−1) if si与sj可以配对fi,j=min(fi,j,fi,k+fk+1,j)
答案为
f
1
,
n
f_{1,n}
f1,n。
总结:哇哇哇摆大烂了happy!