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