E加密的情书
本人太菜,只会签到

题意:

一个多位数可以通过加密变成个位数,加密方式为:各个位数上的数相加,直到加成个位数
例如:
123 --》 1+2+3=6
现在给出加密后的一串密文
问是否存在连续的自然数数列 l ~ r,加密后就是题目所给的密文

题解:

一开始绕的晕头转向没看明白,后来慢慢捋顺
就是给密文,求原文是什么?但是注意题目要求原文必须是连续的,长度肯定也和密文一样,因为一个数加密成另一个数,一一对应
我们来举一下例子:
比如原文是
19 20 21
加密后就是
1 2 3
原文是:
18 19 20
加密后是:
9 1 2
等等例子
我们可以发现,加密后的文字一般是不出现0的,因为9之后直接就是1,
但是有一种情况除外,那就是原文是0 1 2
加密后还是0 1 2,也就是原文就是0,那密文肯定是0 ,其他不可能出现零,而且9后面就是1,其他数都必须是相连的,不然肯定不存在解
排除所有不是解的情况,那剩下的都成立,那我们直接用a[1]~a[1]+n-1作为原文即可,我们只需要输出任意符合答案即可,我们就输出原文最接近密文本身的情况
看看代码就悟出来了

题意:

#include <cstdio>
#include <iostream>
using namespace std;
int a[1010];
int main()
{
   
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
   
		cin>>a[i];
	}
	for(int i=2;i<=n;i++)
	{
   
		if(a[i]<=9&&a[i]>=2)
		{
   
			if(a[i-1]!=a[i]-1)
			{
   
				cout<<-1;
				return 0;
			}
		}
		else if(a[i]==1)
		{
   
			if(i==2)
			{
   
				if(a[1]==0)continue;
				else if(a[1]==9)continue;
				else
				{
   
					cout<<-1;return 0;
				}
			}
			else if(a[i-1]!=9)
			{
   
				cout<<-1;return 0;
			}
		}
		else
		{
   
				cout<<-1;return 0;
		}
	}
	cout<<a[1]<<" "<<a[1]+n-1;
	return 0;
}