【题解】CF1567C Carrying Conundrum
官方题解的做法根本想不到,讲一下官方题解的做法。
Sol
首先可以发现一个性质,奇数位的数只会进位到奇数位。
偶数位同理。
我们考虑把奇数位的数和偶数位的数单独考虑。
显然,对于一个数 \(n\),分为 \(2\) 个非负整数之和只有 \(n+1\) 种方案。
记奇数位上的数为 \(x\),偶数位上的数为 \(y\)。
那么最终的答案即为 \((x+1) \times (y+1)-2\)。
由于不能取 \(0\) 所以最终的答案还要减去 \(2\)。
Code
signed main()
{
T=read();
while (T--)
{
scanf("%s",st+1); n=strlen(st+1);
num1=num2=0;
for (int i=1;i<=n;i+=2)
num1=num1*10+(st[i]^48);
for (int i=2;i<=n;i+=2)
num2=num2*10+(st[i]^48);
writeln((num1+1)*(num2+1)-2);
}
}

浙公网安备 33010602011771号