C. Carrying Conundrum(思维 + 奇偶数位)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值