题解 CF1996D Fun

Describe

给定两个整数 n,x,求满足 ab+bc+acna+b+cx正整数三元组 (a,b,c) 的个数。

Solution

首先考虑暴力:枚举 a,b,可推出 c 的取值范围:

  • 对于 ab+bc+acn,我们稍微变形:(a+b)cna×b,左右除 (a+b)cna×ba+b

  • 对于 a+b+cx,变形得:cxab

根据不等式的性质(同大取大,同小取小):1cmin(xab,na×ba+b)

算下复杂度发现:bmin(xa,na),是能过的。

Code

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 1e5 + 10;

int n, x;

void solve() {
	ll ans = 0;
	cin >> n >> x;
	for (int a = 1; a <= x; ++a) {
		for (int b = 1; a + b <= x && 1ll * a * b <= n; ++b) {
			ans += min(x - a - b, (n - a * b) / (a + b));
		}
	}
	cout << ans << endl;
}

int main() {
	ios::sync_with_stdio(false); cin.tie(0), cout.tie(0);
	
	int T; cin >> T; while (T --) solve();
	return 0;
}

posted @   lyfandlzf  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示