1 条题解

  • 0
    @ 2025-8-24 22:59:16

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Little_x_starTYJ
    愿时光能缓,愿故人不散! || 众所周知,如果把灯泡放在嘴里,即使你自己一个人也取得出来灯泡。

    搬运于2025-08-24 22:59:16,当前版本为作者最后更新于2024-06-13 14:58:53,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    解题思路

    为了不让数字串中出现 22 的非负整数次幂,那么 1,2,4,81,2,4,8 必须得删去,于是写出了以下代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    int ans;
    signed main() {
    	ios::sync_with_stdio(false);
    	string a;
    	cin >> a;
    	for (int i = 0; i < a.size(); i++) {
    		if (a[i] == '1' || a[i] == '2' || a[i]== '4' || a[i] == '8')
    			ans++;
    	}
    	cout << ans;
    	return 0;
    }
    

    交上去发现只有 1010 分。为什么只有 1010 分?会不会有特殊情况?于是打了一个表,发现 2k(kN)2^k(k\in \N) 只有 6553665536 不包含 1,2,4,81,2,4,8,所以我们还需要单独处理 6553665536。需要注意的是,对于两个重叠的 6553665536,我们只需要删掉 11 个数,例如 655365536655365536,我们只需要删除最中间的 66

    AC 代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    int ans;
    signed main() {
    	ios::sync_with_stdio(false);
    	string a;
    	cin >> a;
    	for (int i = 0; i < a.size(); i++) {
            if (a[i] == '6' && a[i + 1] == '5' && a[i + 2] == '5' && a[i + 3] == '3' && a[i + 4] == '6')
                ans++, i += 4;
        }
    	for (int i = 0; i < a.size(); i++) {
    		if (a[i] == '1' || a[i] == '2' || a[i]== '4' || a[i] == '8')
    			ans++;
    	}
    	cout << ans;
    	return 0;
    }
    
    • 1

    信息

    ID
    9183
    时间
    1000ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者