码蹄集 - MT1258 · 特殊整数

Posted Tisfy.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了码蹄集 - MT1258 · 特殊整数相关的知识,希望对你有一定的参考价值。

传送门


特殊整数

时间限制:1秒
空间限制:65535 KB


题目描述

输入正整数m和n,找到包含m但不能被m整除的n位整数,统计这样的整数有多少个。本题不考虑不合理的输入或者溢出等特殊情况。


输入描述

输入整型,空格分隔。


输出描述

输出整型


样例一

输入

7 5

输出

32152

题目分析

First 骗数据知范围

这一题题目说了“本题不考虑不合理的输入或者溢出等特殊情况”,但是还是没有说n的范围。

因为 n = 9 n=9 n=9的时候也不会溢出,但是 n = 9 n=9 n=9的时候就没法暴力枚举。

因此,我首先想到的就是骗数据

#include <bits/stdc++.h>
using namespace std;

int main() 
    int m, n;
    cin >> m >> n;
    assert(n <= 5);
    return 0;

码蹄集的oj作业似乎没有错误罚时,因此可以上来就这么交一发,看反馈回来的运行结果。

如果返回的结果全部是“答案错误”,那么就说明所有的测试点的n全部 ≤ 5 \\leq 5 5。反之如果返回的结果中存在“运行错误”,那么就说明有测试点的数据 n > 5 n>5 n>5

之后再调整几次骗数据范围,就能得到所有的样例中,最大的 n n n是多少,也就知道了本题中 n n n的数据范围。

Then 愉快地暴力

既然骗到了n的范围( n ≤ 5 n\\leq5 n5),那么我们就可以愉快地暴力啦!

AC代码

#include <bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;

/*
n <= 5
*/

int main() 
    int m, n;
    cin >> m >> n;
    int ans = 0;
    int to = pow(10, n);
    for (int i = pow(10, n - 1); i < to; i++)   // 枚举[10^(n-1), 10^n)范围内的所有的数
        if (i % m == 0)  // 首先得是m的倍数
            continue;
        int t = i;
        bool haveM = false;
        while (t) 
            if (t % 10 == m)   // 其次某一位的数字得等于m
                haveM = true;
                break;
            
            t /= 10;
        
        if (haveM)
            ans++;
    
    cout << ans << endl;
    return 0;

点关注,不迷路

原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/124512685

以上是关于码蹄集 - MT1258 · 特殊整数的主要内容,如果未能解决你的问题,请参考以下文章

算法竞赛入门码蹄集新手村600题(MT1301-1350)

码蹄集 - MT2065 - 整数大小比较

算法竞赛入门码蹄集进阶塔335题(MT2326-2330)

码蹄集 - MT1265 · 区间完数

码蹄集 - MT2093 · 回文数数位

码蹄集 - MT3521 - X/Y