zoukankan      html  css  js  c++  java
  • 【洛谷】P1822 魔法指纹 分段打表

    P1822 魔法指纹

    题目大意

    定义 (magic(n)) 为:将n按十进制顺序写下来,依次对相邻两个数写下差的绝对值,去掉前导 (0),为 (magic(n))。若 (n) 为一位数,则 (magic(n)=n)

    定义幸运数为: 重复对 (n)(magic()运算),如果最后可以变为 (7),那么 (n) 就是一个幸运数。

    给定区间 ([l,r]) 问这个区间中有多少个幸运数。

    题解

    (l,r)的范围均为 ([1,10^9])

    暴力求解肯定不行。

    我们将 ([1,10^9]) 分成 (1000) 段,分别将这 (1000) 段中的幸运数的个数计算好。

    直接初始化到一个数组中,然后对于区间 ([1,r]),我们最多只需暴力求解长度为 (1000000) 的区间。

    代码

    //#include<bits/stdc++.h>
    #include <algorithm>
    #include <iostream>
    #include <map>
    #include <set>
    #include <stack>
    #include <stdio.h>
    #include <string.h>
    #include <vector>
    
    using namespace std;
    
    #define pb push_back
    typedef long long ll;
    typedef unsigned long long ull;
    const int inf = 0x3f3f3f3f;
    const int mod = 1e9 + 7;
    const int seed = 233;
    const int N = 2e5 + 10;
    
    int arr[2000] = { 0, 2045, 1044, 750, 357, 316, 316, 358, 749, 1044, 1474, 866, 1044, 303, 220, 154, 115, 84, 125, 346, 927, 378, 558, 750, 221, 204, 154, 118, 134, 146, 382, 110, 270, 303, 357, 176, 204, 168, 128, 89, 75, 85, 126, 298, 221, 316, 176, 220, 168, 88, 69, 69, 88, 168, 220, 176, 316, 221, 298, 126, 85, 75, 89, 128, 168, 204, 176, 357, 303, 270, 111, 382, 145, 134, 118, 154, 204, 222, 749, 558, 378, 927, 347, 124, 84, 115, 154, 220, 303, 1044, 866, 2022, 754, 224, 71, 86, 115, 168, 298, 558, 1474, 626, 558, 118, 81, 51, 33, 19, 30, 316, 1461, 866, 1044, 303, 220, 154, 115, 84, 125, 346, 927, 110, 558, 94, 221, 96, 77, 48, 32, 26, 60, 74, 270, 116, 66, 95, 204, 118, 83, 55, 29, 50, 126, 118, 77, 50, 76, 113, 168, 57, 43, 44, 88, 108, 79, 40, 41, 44, 91, 98, 85, 41, 89, 69, 81, 34, 23, 30, 21, 80, 67, 136, 145, 74, 64, 51, 21, 22, 24, 35, 53, 489, 347, 75, 61, 51, 24, 13, 28, 172, 79, 1143, 754, 47, 45, 51, 36, 15, 20, 229, 924, 240, 240, 298, 118, 69, 51, 28, 43, 63, 585, 866, 328, 303, 113, 77, 51, 35, 25, 62, 375, 378, 558, 750, 221, 204, 154, 118, 134, 146, 382, 67, 194, 303, 84, 176, 96, 81, 49, 32, 25, 47, 98, 298, 126, 69, 95, 220, 108, 52, 38, 43, 57, 168, 113, 76, 50, 77, 118, 126, 50, 48, 69, 128, 118, 60, 40, 34, 29, 96, 74, 156, 97, 134, 76, 77, 34, 27, 23, 26, 55, 162, 193, 124, 54, 69, 51, 23, 23, 35, 37, 311, 315, 224, 35, 58, 51, 22, 28, 72, 277, 25, 78, 118, 168, 65, 58, 35, 27, 14, 14, 382, 92, 116, 220, 101, 69, 53, 33, 39, 32, 110, 558, 94, 221, 96, 77, 48, 32, 26, 60, 110, 270, 303, 357, 176, 204, 168, 128, 89, 75, 34, 83, 118, 221, 64, 176, 113, 109, 42, 27, 38, 52, 108, 220, 95, 69, 126, 298, 98, 47, 35, 54, 69, 168, 96, 76, 59, 65, 194, 110, 51, 66, 74, 118, 101, 60, 44, 30, 47, 138, 32, 60, 75, 84, 65, 77, 52, 21, 25, 33, 24, 41, 47, 71, 52, 69, 56, 34, 35, 16, 23, 47, 91, 118, 115, 52, 45, 35, 16, 15, 170, 64, 65, 113, 154, 65, 61, 32, 32, 20, 378, 240, 79, 126, 204, 101, 64, 46, 27, 54, 67, 194, 303, 84, 176, 96, 81, 49, 32, 25, 85, 126, 298, 221, 316, 176, 220, 168, 88, 69, 27, 42, 109, 113, 176, 64, 221, 118, 83, 34, 29, 55, 83, 118, 204, 95, 66, 116, 270, 74, 41, 49, 78, 76, 154, 96, 77, 33, 78, 110, 23, 46, 49, 54, 115, 101, 79, 29, 23, 52, 15, 22, 53, 35, 86, 65, 81, 52, 26, 12, 12, 26, 52, 81, 65, 86, 35, 53, 22, 15, 52, 23, 29, 79, 101, 115, 54, 49, 46, 23, 110, 78, 33, 77, 96, 154, 76, 78, 49, 41, 74, 270, 116, 66, 95, 204, 118, 83, 55, 29, 34, 83, 118, 221, 64, 176, 113, 109, 42, 27, 69, 88, 168, 220, 176, 316, 221, 298, 126, 85, 25, 32, 49, 81, 96, 176, 84, 303, 194, 67, 54, 27, 46, 64, 101, 204, 126, 79, 240, 378, 20, 32, 32, 61, 65, 154, 113, 65, 64, 170, 15, 16, 35, 45, 52, 115, 118, 91, 47, 23, 16, 35, 34, 56, 69, 52, 71, 47, 41, 24, 33, 25, 21, 52, 77, 65, 84, 75, 60, 32, 138, 47, 30, 44, 60, 101, 118, 74, 66, 51, 110, 194, 65, 59, 76, 96, 168, 69, 54, 35, 47, 98, 298, 126, 69, 95, 220, 108, 52, 38, 27, 42, 109, 113, 176, 64, 221, 118, 83, 34, 75, 89, 128, 168, 204, 176, 357, 303, 270, 110, 60, 26, 32, 48, 77, 96, 221, 94, 558, 110, 32, 39, 33, 53, 69, 101, 220, 116, 92, 382, 14, 14, 27, 35, 58, 65, 168, 118, 78, 26, 276, 72, 28, 22, 51, 58, 36, 224, 315, 310, 37, 35, 23, 23, 51, 69, 54, 125, 193, 161, 55, 26, 23, 27, 34, 77, 76, 134, 98, 155, 74, 96, 29, 34, 40, 60, 118, 128, 69, 48, 50, 126, 118, 77, 50, 76, 113, 168, 57, 43, 38, 52, 108, 220, 95, 69, 126, 298, 98, 47, 25, 32, 49, 81, 96, 176, 84, 303, 194, 68, 382, 145, 134, 118, 154, 204, 222, 749, 558, 379, 374, 62, 25, 35, 51, 77, 113, 304, 327, 867, 584, 63, 43, 28, 51, 69, 118, 298, 241, 239, 924, 229, 20, 15, 36, 51, 45, 47, 754, 1143, 79, 172, 28, 13, 24, 51, 61, 76, 346, 489, 53, 35, 24, 22, 21, 51, 64, 74, 145, 136, 67, 80, 21, 30, 23, 34, 81, 69, 89, 41, 85, 98, 91, 44, 41, 40, 79, 108, 88, 44, 43, 57, 168, 113, 76, 50, 77, 118, 126, 50, 29, 55, 83, 118, 204, 95, 66, 116, 270, 74, 60, 26, 32, 48, 77, 96, 221, 94, 558, 110, 927, 347, 124, 84, 115, 154, 220, 303, 1044, 866, 1461, 316, 30, 19, 33, 51, 81, 118, 558, 626, 3567, 2257, 88, 6, 20, 33, 35, 54, 314, 2022, 371, 1006, 134, 9, 9, 36, 53, 50, 192, 927, 57, 72, 84, 14, 11, 24, 48, 78, 98, 382, 46, 41, 23, 18, 9, 21, 56, 83, 69, 75, 50, 83, 52, 27, 21, 23, 52, 109, 57, 69, 44, 88, 108, 79, 40, 41, 44, 91, 98, 85, 35, 54, 69, 168, 96, 76, 59, 65, 194, 110, 54, 27, 46, 64, 101, 204, 126, 79, 240, 379, 374, 62, 25, 35, 51, 77, 113, 304, 327, 866, 2022, 754, 224, 71, 86, 115, 168, 298, 558, 1474 };
    int brr[1000];
    int magic(int x)
    {
        if (x < 10)
            return x;
        int cnt = 0;
        while (x) {
            brr[++cnt] = x % 10;
            x /= 10;
        }
        int ans = 0;
        for (int i = cnt; i > 1; i--) {
            ans = ans * 10 + abs(brr[i] - brr[i - 1]);
        }
        return magic(ans);
    }
    
    int solve(int n)
    {
        int ans = arr[n / 1000000];
        for (int i = n / 1000000 * 1000000 + 1; i <= n; i++) {
            if (magic(i) == 7)
                ans++;
        }
        return ans;
    }
    
    int main()
    {
        for (int i = 1; i <= 1000; i++)
            arr[i] += arr[i - 1];
        int a, b;
        scanf("%d%d", &a, &b);
        printf("%d
    ", solve(b) - solve(a - 1));
        return 0;
    }
    
  • 相关阅读:
    SharePoint 2013 中的SQL Server 安全
    SharePoint 2013 的HTML5特性之响应式布局
    SharePoint 2013 一些小技巧
    SharePoint 2013 排错之"Code blocks are not allowed in this file"
    SharePoint 2013 创建搜索中心及搜索设置
    SharePoint 2013 使用PowerShell创建State Service
    SharePoint 2013 内容部署功能简介
    SharePoint 使用PowerShell恢复误删的网站集
    SharePoint 自定义WebPart之间的连接
    linux之misc及使用misc创建字符设备
  • 原文地址:https://www.cnblogs.com/valk3/p/14090285.html
Copyright © 2011-2022 走看看