P10571 [JRKSJ R8] 三七二十一 题解

· · 题解

题目传送门

思路

首先,1=2^0,2=2^1,4=2^2,8=2^3,所以只要这个序列有 1,2,4,8,那么就要对这些数字进行一次更改。

我们考虑有没有这个数字既没有哪一位为 1,2,4,8,还是 2 的非负整数次幂,在 10^6 之内,只找到了 65536 这个特殊的数字,如果在序列中找到了 65536 这个数字,那么就进行一次更改。

code

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string n;
    cin>>n;
    int ans=0;
    for (int i=0;i<n.length();i++)
    {
        if (n[i]=='2'||n[i]=='4'||n[i]=='8'||n[i]=='1')
        {
            ans=ans+1;
            n[i]='0';
        }
        if (i>3&&n[i]=='6'&&n[i-1]=='3'&&n[i-2]=='5'&&n[i-3]=='5'&&n[i-4]=='6')
        {
            ans=ans+1;
            n[i]='0';
        }
    }
    cout<<ans<<endl;
}