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();
	}
}

posted @ 2025-02-05 17:10  扶风zer0  阅读(28)  评论(0)    收藏  举报