2024.3.10 【多识草木少识人 常守世间清净心】
Sunday 二月初一
今天模拟赛啊。
T1
题目描述
淘淘蓝蓝在打游戏。他们有
n
n
n个技能,每个技能有两个正整数为参数,分别表示法术加成与基础伤害。具体的,如果他们的法术强度为,则该技能造成的伤害为。
由于他们技能的基础伤害不是很高,在最后与boss的对战中,淘淘蓝蓝使用了外挂,大幅提升了自己的法术强度。淘淘蓝蓝有
q
q
q 个询问,每个询问有两个参数
k
k
k 和
m
m
m,表示当前的法术强度为 k ,最多能使用 m 个技能,他们想知道这
m
m
m 个技能最多能打出多少伤害。
输入格式
第一行一个整数
n
n
n。
接下来
n
n
n 行,每行两个整数
a
i
,
b
i
a_i,b_i
ai,bi,表示第
i
i
i 个技能的法术加成与基础伤害。
第
n
+
2
n+2
n+2 行,一个整数
q
q
q ,表示有
q
q
q 个询问。
接下来
q
q
q 行,每行两个整数
k
k
k ,
m
m
m, 表示当前的法术强度为
k
k
k ,最多能使用
m
m
m 个技能。
输出格式
q 行,每行一个整数,为伤害的最大值。
样例输入
4
1007 991
514 8
3134 62
559 101
1
2103 3
样例输出
9885254
提示说明
对于
20
20%
20 的数据,
n
,
q
≤
100
n,q≤100
n,q≤100 ;
对于
40
40%
40 的数据,
n
,
q
≤
1000
n,q≤1000
n,q≤1000 ;
对于
60
60%
60 的数据,
n
,
q
≤
5000
n,q≤5000
n,q≤5000 ;
对于
80
80%
80 的数据,
n
,
q
≤
100000
,
m
≤
500
n,q≤100000 ,m≤500
n,q≤100000,m≤500 ;
对于全部数据,
q
≤
500000
,
1
≤
a
i
≤
10000
,
1
≤
b
i
≤
1000
,
1000
≤
k
≤
100000000
,
1
≤
m
≤
q
q≤500000 , 1≤a_i≤10000 ,1≤b_i≤1000 ,1000≤k≤100000000 ,1≤m≤q
q≤500000,1≤ai≤10000,1≤bi≤1000,1000≤k≤100000000,1≤m≤q。
STL ,前缀和
发现数据范围有点怪…具体来说,观察到
1
≤
a
≤
10000
1≤a≤10000
1≤a≤10000,而
b
≤
1000
,
k
≥
1000
b≤1000,k≥1000
b≤1000,k≥1000,会发现
k
a
ka
ka 总是大于
b
,
a
b,a
b,a的影响完全
大于
b
b
b的,直接把第一关键字设为
a
,
b
a,b
a,b为第二关键字降序排序,再分别求出
a
,
b
a,b
a,b的前缀和就行。
(nnd,下次别在数据范围里埋坑了)
T2
题目描述
虽然被迫转移了阵地,但是机房的 OIer 们很快就卷土重来。可是电脑里的数据都被破坏了,hs_black 公司需要给每台电脑恢复数据。
机房一共有
n 排电脑(从 1 到 n)
hs_black 公司准备了 m 个电脑修复专业户——OIer。 一开始 m 个 OIer 都挤在门口(相当于第 0 排),每时刻每个 OIer 可以进行两种动作:
从某一排走向下一排
为这一排的某一台电脑恢复数据
每个 OIer 都是互相独立的,请问 OIer 们恢复所有数据最少要用多少时间。
输入格式
第一行两个正整数
n
,
m
n,m
n,m 表示电脑的排数和 OIer 的数量。
第二行
n
n
n 个非负整数,第
i
i
i个整数表示第
i
i
i 行的电脑数。
输出格式
输出一行一个整数,表示最少恢复用时。
样例输入
3 2
1 0 2
样例输出
5
数据规模与约定
对于
30
30%
30数据,
1
<
=
n
,
m
<
=
100
1<=n,m<=100
1<=n,m<=100.
对于
100
100%
100数据,
1
<
=
n
,
m
<
=
100000
1<=n,m<=100000
1<=n,m<=100000,输入的任何数字不超过输入的任何数字不超过
1
0
9
10^9
109。
(机房学长说是模拟被hack了)
二分答案、贪心
bool check(ll x)
{
if(x<=n&&s[x])return 0;
ll lef=m*(x-1);
for(int i=1;i<min(1ll*n+1,x);i++)
{
if(lef<a[i])return 0;
lef-=a[i];
lef-=(lef+(x-i)-1)/(x-i);
}
return 1;
}
T3
方程的解
题目描述
佳佳碰到了一个难题,请你来帮忙解决。对于不定方程
a
1
+
a
2
+
⋯
+
a
k
−
1
+
a
k
=
g
(
x
)
a_1+a_2+\cdots +a_{k-1}+a_k=g(x)
a1+a2+⋯+ak−1+ak=g(x),其中
k
≥
2
k\ge 2
k≥2 且
k
∈
N
∗
k\in \mathbb{N}^*
k∈N∗,
x
x
x 是正整数,
g
(
x
)
=
x
x
m
o
d
1000
g(x)=x^x \bmod 1000
g(x)=xxmod1000(即
x
x
x^x
xx 除以
1000
1000
1000 的余数),
x
,
k
x,k
x,k 是给定的数。我们要求的是这个不定方程的正整数解组数。
举例来说,当
k
=
3
,
x
=
2
k=3,x=2
k=3,x=2 时,方程的解分别为:
{
a
1
=
1
a
2
=
1
a
3
=
2
\begin{cases} a_1=1\\ a_2=1\\ a_3=2 \end{cases}
⎩
⎨
⎧a1=1a2=1a3=2
{
a
1
=
1
a
2
=
2
a
3
=
1
\begin{cases} a_1=1\\ a_2=2\\ a_3=1 \end{cases}
⎩
⎨
⎧a1=1a2=2a3=1
{
a
1
=
2
a
2
=
1
a
3
=
1
\begin{cases} a_1=2\\ a_2=1\\ a_3=1 \end{cases}
⎩
⎨
⎧a1=2a2=1a3=1
输入格式
输入有且只有一行,为用空格隔开的两个正整数,依次为
k
,
x
k,x
k,x。
输出格式
输出有且只有一行,为方程的正整数解组数。
样例 #1
样例输入 #1
3 2
样例输出 #1
3
提示
- 对于 40 % 40\% 40% 的数据, a n s ≤ 1 0 16 \mathit{ans} \le 10^{16} ans≤1016;
- 对于
100
%
100\%
100% 的数据,
k
≤
100
k \le 100
k≤100,
x
≤
2
31
−
1
x \le 2^{31}-1
x≤231−1,
k
≤
g
(
x
)
k \le g(x)
k≤g(x)。
NOI导刊2010提高(01)
就摁exgcd就行了
(我数论白学了)
T4
题目描述
有n个白色棋子,m个黑色棋子,现在需要把他们排成一排,要求对于任意一段棋子,其中的白色棋子和黑色棋子的差不能超过k,求棋子排列方案数对
1000000007
(
1
e
9
+
7
)
1000000007(1_e9+7)
1000000007(1e9+7)的结果。
注:(黑-黑-白-白) 与 (白-白-黑-黑) 视为不同的方案。
输入输出格式
输入格式
第一行三个正整数表示
n
,
m
,
k
n,m,k
n,m,k。
输出格式
一个数表示答案。
输入输出样例
输入样例 #1
2 2 1
输出样例 #1
2
输入样例 #2
19 12 2
输出样例 #2
0
输入样例 #3
11 14 4
输出样例 #3
485072
样例解释
对于样例1,
k
=
1
k=1
k=1,则白棋子和黑棋子均不能两枚相邻,于是可行的排列只有两种:1.黑-白-黑-白/2.白-黑-白-黑方案数2。
DP
黑棋子比白棋子多bla个,白棋子黑棋子多 whi个,那么转移方程为:
转移方程:
f
[
i
+
1
]
[
j
]
[
b
l
a
+
1
]
[
m
a
x
(
w
h
i
−
1
,
0
)
]
+
=
f
[
i
]
[
j
]
[
b
l
a
]
[
w
h
i
]
f
[
i
]
[
j
+
1
]
[
m
a
x
(
b
l
a
−
1
,
0
)
]
[
w
h
i
+
1
]
+
=
f
[
i
]
[
j
]
[
b
l
a
]
[
w
h
i
]
f[i+1][j][bla+1][max(whi-1,0)]+=f[i][j][bla][whi]\\ f[i][j+1][max(bla-1,0)][whi+1]+=f[i][j][bla][whi]
f[i+1][j][bla+1][max(whi−1,0)]+=f[i][j][bla][whi]f[i][j+1][max(bla−1,0)][whi+1]+=f[i][j][bla][whi]
时间复杂度很好看啊:
O
(
n
m
k
2
)
O(nmk^2)
O(nmk2)