A:缺少的数
给你一个包含9个数字的串,每种数字有且仅出现一次,现在请你求出那个没有出现的数字。
#include<cstdio>
bool b[20];
int main(){
for(int i=0;i<9;i++)b[getchar()-48]=1;
for(int i=0;i<10;i++)
if(!b[i]){
printf("%d",i);
}
return 0;
}
B:复制
小明开始的时候有 A A A 个气泡,每复制一次,气泡的数量就是原来的 K K K 倍,问小明最少要复制几次,才能至少有 B B B 个气泡?
#include<cstdio>
long long a,b,k;
int main(){
scanf("%lld%lld%lld",&a,&b,&k);
if(a>=b){
printf("0");return 0;
}
for(int i=1;;i++){
a*=k;
if(a>=b){
printf("%d",i);return 0;
}
}
return 0;
}
C:序列数量
求长度为
N
N
N的正整数序列
A
=
{
A
1
,
A
2
,
.
.
.
,
A
N
}
A=\{ A_1,A_2,...,A_N\}
A={A1,A2,...,AN}有多少个,满足下面的条件:
∙
\bullet
∙
1
≤
A
i
≤
M
(
1
≤
i
≤
N
)
1 \leq A_{i} \leq M(1 \leq i \leq N)
1≤Ai≤M(1≤i≤N)
∙
\bullet
∙
∑
i
=
1
N
A
i
≤
K
\sum_{i=1}^{N} A_{i} \leq K
∑i=1NAi≤K
由于序列的数量可能很多,只要输出对
998244353
998244353
998244353 取模的结果即可。
思路:dp
f
[
i
]
[
j
]
f[i][j]
f[i][j] 记录前
i
i
i 个数和为
j
j
j 的情况。
#include<cstdio>
typedef long long ll;
const ll zry=998244353;
ll n,m,l,f[55][2505],sum;
ll min(int a,ll b){return((a<b)?a:b);}
int main(){
f[0][0]=1;
scanf("%lld%lld%lld",&n,&m,&l);
for(int i=1;i<=n;i++)
for(int j=i;j<=min(l,i*m);j++)
for(int k=1;k<=min(j,m);k++)f[i][j]=(f[i][j]+f[i-1][j-k])%zry;
for(int j=n;j<=l;j++)sum=(sum+f[n][j])%zry;
printf("%lld",sum);
return 0;
}