做法1
看到数据范围直接双重循环枚举,时间复杂度为 $O(n^2)$。
做法2
如果 $1 \leq a,b \leq 10^5$ 怎么做?
考虑到确定第一个数就可以确定第二个数,直接判断,时间复杂度 $O(n)$
做法3
如果 $1 \leq a,b \leq 10^9$ 怎么做?
考虑对于第一个条件 $0 \leq x \leq a$,第一个数合法区间为 $0\ \text{~}\ a$。
考虑对于第二个条件 $0 \leq y \leq b$,根据条件 $x + y = n$,推出第一个数合法区间为 $n - b\ \text{~}\ n$。
我们的目标就是求两个区间的交集,即求 $n - b$ 到 $a$ 的区间的长度。
时间复杂度 $O(1)$。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int a, b, n;
int main()
{
cin >> a >> b >> n;
cout << min(a, n) - max(n - b, 0) + 1 << endl; //注意可能出现 a >= n, b >= n
return 0;
}
👍
Orz%%%
牛的%%%