爱丽丝刚刚学会了加法。但是,她还没有完全学会 "携带 "的概念--她不是携带到下一列,而是携带到左边两列的列。
例如,评估2039+2976这个和的常规方法是如图所示。
然而,爱丽丝是按照图中的方式进行评估的。
具体来说,她是这样做的。
将9和6相加得出15,并将1带到左边两列,即 "0 9 "列。
加3和7得10,并把1带到左边两列,即 "2 2 "列。
加1、0和9组成10,并将1带到左边两列,即加号上面的那一列。
加1,2和2组成5。
加1为1。
因此,她最后得到的结果是不正确的15005。
爱丽丝走到鲍勃面前,说她把两个数字相加,得到的结果是n,但是,鲍勃知道爱丽丝是用她自己的方式加的。请帮助鲍勃找出有秩序的正整数对的数目,使爱丽丝将它们相加后得到的结果是n。请注意,如果a≠b,则成对的(a,b)和(b,a)被视为不同。
输入
输入由多个测试案例组成。第一行包含一个整数t(1≤t≤1000)--测试案例的数量。测试用例的描述如下。
每个测试用例的唯一一行包含一个整数n (2≤n≤109) - Alice向Bob展示的数字。
输出
对于每个测试用例,输出一个整数 - 有序的正整数对的数量,当Alice将它们相加时,她会得到一个n的结果。
例子
inputCopy
5
100
12
8
2021
10000
输出拷贝
9
4
7
44
99
备注
在第一个测试案例中,当Alice评估1+9, 2+8, 3+7, 4+6, 5+5, 6+4, 7+3, 8+2, 或9+1中的任何一个和时,她将得到一个100的结果。下图显示了爱丽丝是如何计算6+4的。
题解:
题目说每次仅为向左移动两位,可以发现奇数位只会影响奇数位,偶数位只会影响偶数位
我们得到奇数位x与偶数位的数y,
x与y可以分别由x+1,y+1种方法组成
答案位(x+1)*(y+1),因为会有一个数奇数位和偶数位全为0的情况,但题目中明确要求两个正整数,而既然有一个数,肯定会有两种情况(交换位置)
(题中给你说的信息肯定是有用的,没有思路时仔细揣摩一下题目为什么要给这样的条件)
- #include<iostream>
- #include<vector>
- #include<queue>
- #include<cstring>
- #include<algorithm>
- #include<string>
- #include<map>
- using namespace std;
- #define int long long
- int a[100040];
- void solve()
- {
- // ios::sync_with_stdio(false);
- // cin.tie(0);
- // cout.tie(0);
- string s;
- cin >> s;
- int n = 0,m = 0;
- for(int i = 0;i < s.size();i++)
- {
- if(i&1)
- {
- n = n*10 + s[i] - '0';
- }
- else
- {
- m = m*10 + s[i] - '0';
- }
- }
- cout<<(n+1)*(m+1) - 2<<"\n";
- }
- signed main()
- {
- int t = 1;
- cin >> t;
- while(t--)
- {
- solve();
- }
- }