CodeForeces-Good Triples 拆位

题目

这道题 我感觉考得很有意思 考了一个 拆位的思想以及数学中的隔板法,首先对于一个n位数的数,我们要找到三个数相加等于他并且这三个数的数位之和要等于他,数据很大,很明显对于On的做法都要寄,

在这里我们需要想到一个拆位的思想,对于n的每一位拆开计算,那么这三个数的此位相加要等于这个位,这个时候就不能发生进位,否则肯定不能相等,想到这个其实题目大概就出来了,然后假设n的其中一位是x,那么就相当于有x个苹果,3个箱子,其中箱子可以拿0个苹果,这种隔板的写法首先要+3,因为不能对于一个空拿好几块板子上去弄,所以就可以c(x+2,2)就行了

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int range = 2e5 + 5;
int n;
int a[range];

void solve() {

	int ans = 1;
	cin >> n;
	while (n) {
		int g = n % 10;
		n /= 10;
		ans *= (g + 1) * (g + 2) / 2;

	}
	cout << ans << endl;

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


}
posted @ 2025-04-16 19:58  LteShuai  阅读(3)  评论(0)    收藏  举报