Codeforces Round #742 (Div. 2) Problem - C. Carrying Conundrum 題解
阿新 • • 發佈:2021-09-06
Codeforces Round #742 (Div. 2) Problem - C. Carrying Conundrum 題解
。然後再將\(45,9\),\(90,15\)組合起來,就能得到一組數\((495, 1950)\)。
運用Alice的加法,\(495 + 1950 = 12345\)。 這就是其中一個解。
總共有多少種解?這取決於\(a,b\)可以拆分成多少種。
一個正數\(x\)可以拆分成\(x+1\)種:\(0+x, 1+(x-1), 2+(x-2), ..., x+0\)。
所以總共的解應該為\((a+1)*(b+1)\)。題目中要求拆分出來的數字,必須為正數,也就是\(n=12345\)時,\((0, 12345)\)與\((12345, 0)\)是不符合的。所以要減去\(2\)。
最終結果為\((a+1)*(b+1)-2\) 。
題目
原題連線
Codeforces Round #742 (Div. 2) Problem - C. Carrying Conundrum
題目大意
題目大概意思為給你一個數\(n\),這個\(n\)是按照Alice的那種加法方法算\(a + b\)算出來的。
求\((a,b)\)有幾種。
Alice的加法方法為,加法進位時候,進到下下一位。具體操作看圖片咯。
題解
思路
Alice的加法,其實可以看做,奇數位加奇數位的,偶數位加偶數位的。
假設\(n=12345\),把它奇偶數位拆分開得到\(a=135, b=24\)。\(a\)可以拆分成\(135 = 45 + 90\),\(b\)可以拆分成\(24 = 9 + 15\)
運用Alice的加法,\(495 + 1950 = 12345\)。 這就是其中一個解。
總共有多少種解?這取決於\(a,b\)可以拆分成多少種。
一個正數\(x\)可以拆分成\(x+1\)種:\(0+x, 1+(x-1), 2+(x-2), ..., x+0\)。
所以總共的解應該為\((a+1)*(b+1)\)。題目中要求拆分出來的數字,必須為正數,也就是\(n=12345\)時,\((0, 12345)\)與\((12345, 0)\)是不符合的。所以要減去\(2\)。
最終結果為\((a+1)*(b+1)-2\)
程式碼
then show the code.
不忘初心方得始終#include <iostream> #include <string> using namespace std; int main(){ int t; cin >> t; while(t--){ string s, s1, s2; cin >> s; for(int i=0; i<s.size(); i++){ if(i&1) s2 += s[i]; else s1 += s[i]; } if(s2.empty()) cout << stoi(s1) - 1 << endl; else cout << (stoi(s1)+1) * (stoi(s2)+1) - 2 << endl; } return 0; }