一起来abc
题目描述
已知a和b的范围是0到1000000,c的范围是0到1000000,请问有多少种满足条件的三元组(x, y, z) 满足x + y = z。其中 x ∈ [0, a] 且 y ∈ [0, b] 且 z ∈ [0, c]
输入格式
输入三个整数a,b,c
0 ≤ a ≤1000000
0 ≤ b ≤1000000
0 ≤ c ≤1000000
输出格式
输出满足条件的三元组个数
样例输入
2 2 2
样例输出
6
思路:
暴力for三层循环不行,优化成两层循环也不行,最后只能找一些规律。如果a>=i,说明0-i都是可以的;如果a<i但是b>=i,a=0的时候肯定能等于i,然后b肯定能变小,但是a最大就是a了,所以是0-a,如果都小于i,两个加起来多出来的就是等于i的。
#include<bits/stdc++.h>
#define int long long
using namespace std;
main(){
int a, b, c;
cin >> a >> b >> c;
if(a > b){
swap(a, b);
}
int ans = 0;
for(int i = 0; i <= c; i++){
if(a+b<i){
break;
}
if(a >= i){
ans += i + 1;
}else if(b >= i){
ans += a + 1;
}else{
ans += a + b - i + 1;
}
}
cout << ans << endl;
return 0;
}