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