2021-2022-1 ACM集训队每周程序设计竞赛 - 问题 B: 求和 - 题解
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-2022-1 ACM集训队每周程序设计竞赛 - 问题 B: 求和 - 题解相关的知识,希望对你有一定的参考价值。
求和
时间限制:2秒
空间限制:256M
题目描述
小T给你两个整数 K K K和 S S S,问你有多少个不同的三元组 ( X , Y , Z ) (X, Y, Z) (X,Y,Z)满足:
- X + Y + Z = S X+Y+Z=S X+Y+Z=S
-
0
≤
X
,
Y
,
Z
≤
K
0\\leq X,Y,Z\\leq K
0≤X,Y,Z≤K
输入描述
一行空格隔开的两个整数 K 和 S K和S K和S,其中
- 2 ≤ K ≤ 2500 2\\leq K\\leq 2500 2≤K≤2500
-
0
≤
S
≤
3
K
0\\leq S\\leq 3K
0≤S≤3K
输出描述
输出满足条件的三元组的个数
样例一
输入
2 2
输出
6
提示
- ( 0 , 0 , 2 ) (0,0,2) (0,0,2)
- ( 0 , 2 , 0 ) (0,2,0) (0,2,0)
- ( 2 , 0 , 0 ) (2,0,0) (2,0,0)
- ( 0 , 1 , 1 ) (0,1,1) (0,1,1)
- ( 1 , 0 , 1 ) (1,0,1) (1,0,1)
- ( 1 , 1 , 0 ) (1,1,0) (1,1,0)
题目分析
这道题有点像学习C语言基础时候的鸡兔同笼问题
,只是
3
3
3层循环复杂度
O
(
k
3
)
O(k^3)
O(k3)会超时,所以用两层循环复杂度
O
(
k
2
)
O(k^2)
O(k2)即可。
第一层循环枚举第一个数 i i i,第二层循环枚举第二个数 j j j,因为三个数之和是 S S S,所以第三个数 r r r必是 S − i − j S-i-j S−i−j。只需要判断 r r r是否属于 0 ∼ k 0\\sim k 0∼k即可。
AC代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int k,s;
cin>>k>>s;
int ans=0;
for(int i=0;i<=k;i++)
{
for(int j=0;j<=k;j++)
{
int r=s-i-j;
if(0<=r&&r<=k)
ans++;
}
}
cout<<ans<<endl;
return 0;
}
原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/120225806
以上是关于2021-2022-1 ACM集训队每周程序设计竞赛 - 问题 B: 求和 - 题解的主要内容,如果未能解决你的问题,请参考以下文章
BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛(10)题解
BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解
BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解