2.5练习
原题链接:https://codeforces.com/contest/1996/problem/D
这题是说给两个数n,x。请问有多少全为正整数的三元组(a,b,c)满足a+b+c<=x并且ac+ab+bc<=n。
将给出的公式变形可得到c<=x-a-b;c<=(n-ab)/(a+b)。此时可以根据变形后的公式来求这两个数。由于c必须完全满足这两个公式,因此c<=min(x-a-b,(n-ab)/(a+b)),此时可以用两层for循环求a,b的值,然后根据a,b的值判断c是否存在。
此时我们令c=min(x-a-b,(n-ab)/(a+b)),可以得到c存在的最大值,此时存在c个满足条件的三元组,将所有的值加起来就是结果了。
代码如下:
点击查看代码
#include <bits/stdc++.h>
using namespace std;
void solve()
{
int n,x;
cin>>n>>x;
int aa=0;
for(int a=1;a<=x;a++){
for(int b=1;b<=x-a;b++){
if(a*b>=n) break;
int c=min(x-a-b,(n-a*b)/(a+b));
if(c>0) aa+=c;
}
}
cout<<aa<<endl;
}
int main()
{
int t;
cin>>t;
while(t--){
solve();
}
}

浙公网安备 33010602011771号