Problem - 1567C - Codeforces
爱丽丝刚刚学会了加法。但是,她还没有完全学会 "携带 "的概念--她不是携带到下一列,而是携带到左边两列的列。
例如,评估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();
}
}