题目

对于任意一个至少两位的正整数n,按如下方式定义magic(n):将n按十进制顺序写下来,依次对相邻两个数写下差的绝对值。这样,得到了一个新数,去掉前导0,则定义为magic(n)。若n为一位数,则magic(n)=n。

例如:magic(5913)=482,magic(1198)=081=81,magic(666)=00=0。

对任意一个数n,序列n,magic(n),magic(magic(n)),…迟早会变成一个一位数。最后的这个值称为数n的magic指纹。

例如,对于n=5913,我们得到序列:5913,482,46,2。所以5913的magic指纹为2。

若一个数的magic指纹为7,则认为这个数是个幸运数。

现在,给定A,B,计算出[A,B]中有多少个数是幸运数。

输入:

输入两行,每行一个数。第一行是A,第二行表示B。

输出:

输出[A,B]中有多少个数是幸运数。

输入格式

输入两行,每行一个数。第一行是A,第二行表示B。

输出格式

输出[A,B]中有多少个数是幸运数。

输入样例

1

9

输出样例

1

提示

数据范围:

对30%数据,B≤10000。

对100%数据,0<A≤B≤1,000,000,000。

题解

这解法。。无敌了

分块大法好

将区间分\(\sqrt{N}\)块,打表出每一块的答案【暴力打个1min就差不多了】

询问时\(O(\sqrt{N})\)统计,最后一块\(O(\sqrt{N}*10)\)暴力计算

这暴力太优美了

打表程序【记得先调一下再打。。别打半天打出个错的表】

  1. #include<iostream>
  2. #include<cmath>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<algorithm>
  6. #define LL long long int
  7. #define REP(i,n) for (int i = 1; i <= (n); i++)
  8. #define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
  9. #define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
  10. using namespace std;
  11. const int maxn = 32000,maxm = 1000000001,INF = 1000000000;
  12. inline int read(){
  13. int out = 0,flag = 1; char c = getchar();
  14. while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}
  15. while (c >= 48 && c <= 57) {out = (out << 3) + (out << 1) + c - '0'; c = getchar();}
  16. return out * flag;
  17. }
  18. int cal(int n){
  19. int x,p;
  20. while (n / 10){
  21. x = n; p = 1; n = 0;
  22. while (x / 10) n += p * abs((x % 10) - (x / 10 % 10)),p *= 10,x /= 10;
  23. }
  24. return n;
  25. }
  26. int main(){
  27. freopen("biao.txt","w",stdout);
  28. printf("{");
  29. int B = (int)sqrt(1000000000),now = 0,ans = 0;
  30. for (int i = 1; i <= 1000000000; i++){
  31. if (i / B > now) now = i / B,printf("%d,",ans),ans = 0;
  32. if (cal(i) == 7) ans++;
  33. }
  34. printf("}");
  35. /*while (true){
  36. int n = read();
  37. printf("%d\n",cal(n));
  38. }*/
  39. return 0;
  40. }

AC程序【省略打表部分】

  1. #include<iostream>
  2. #include<cmath>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<algorithm>
  6. #define LL long long int
  7. #define REP(i,n) for (int i = 1; i <= (n); i++)
  8. #define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
  9. #define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
  10. using namespace std;
  11. const int maxn = 400005,maxm = 100005,INF = 1000000000;
  12. int biao[]={/*此处过于壮观,就略去了*/};
  13. int L,R;
  14. int cal(int n){
  15. int x,p;
  16. while (n / 10){
  17. x = n; p = 1; n = 0;
  18. while (x / 10) n += p * abs((x % 10) - (x / 10 % 10)),p *= 10,x /= 10;
  19. }
  20. return n;
  21. }
  22. int main(){
  23. cin>>L>>R; L--;
  24. int ans = 0,T = (int)sqrt(1000000000),bl = L / T,br = R / T;
  25. for (int i = bl; i < br; i++) ans += biao[i];
  26. for (int i = br * T; i <= R; i++) ans += (cal(i) == 7);
  27. for (int i = bl * T; i <= L; i++) ans -= (cal(i) == 7);
  28. printf("%d\n",ans);
  29. return 0;
  30. }

洛谷P1822 魔法指纹 【分块打表】的更多相关文章

  1. [洛谷P1822] 魔法指纹

    洛谷题目连接:魔法指纹 题目描述 对于任意一个至少两位的正整数n,按如下方式定义magic(n):将n按十进制顺序写下来,依次对相邻两个数写下差的绝对值.这样,得到了一个新数,去掉前导0,则定义为ma ...

  2. 洛谷 U87561 魔法月饼

    洛谷 U87561 魔法月饼 洛谷传送门 题目背景 \(9102\)年的中秋节注定与往年不同...因为在\(9102\)年的中秋节前夕,\(Seaway\)被告知今年的中秋节要新出一款月饼--魔法月饼 ...

  3. 洛谷P4198 楼房重建 (分块)

    洛谷P4198 楼房重建 题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题, ...

  4. 洛谷P4135 作诗 (分块)

    洛谷P4135 作诗 题目描述 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章 ...

  5. P1822 魔法指纹

    一道放在分块训练中的分块打表屑题 看了神NaCly_Fish的题解学了间隔打表(话说这么屑的东西有什么学的必要吗) 内容大多摘自大佬的题解 1,答案可递推,才适合间隔打表 什么叫可递推呢?假设f[n] ...

  6. 洛谷P3247 [HNOI2016]最小公倍数 [分块,并查集]

    洛谷 思路 显然,为了达到这个最小公倍数,只能走\(a,b\)不是很大的边. 即,当前询问的是\(A,B\),那么我们只能走\(a\leq A,b\leq B\)的边. 然而,为了达到这最小公倍数,又 ...

  7. 洛谷P3247 [HNOI2016]最小公倍数(分块 带撤销加权并查集)

    题意 题目链接 给出一张带权无向图,每次询问\((u, v)\)之间是否存在一条路径满足\(max(a) = A, max(b) = B\) Sol 这题居然是分块..想不到想不到..做这题的心路历程 ...

  8. 洛谷P3247 最小公倍数 [HNOI2016] 分块+并查集

    正解:分块+并查集 解题报告: 传送门! 真的好神仙昂QAQ,,,完全想不出来,,,还是太菜了QAQ 首先还是要说下,这题可以用K-D Tree乱搞过去(数据结构是个好东西昂,,,要多学学QAQ),但 ...

  9. 【洛谷】【前缀和+st表】P2629 好消息,坏消息

    [题目描述:] uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一 ...

随机推荐

  1. Portal的认证方式

    不同的组网方式下,可采用的 Portal 认证方式不同.按照网络中实施 Portal 认证的 网络层次来分,Portal 的认证方式分为两种:二层认证方式和三层认证方式. 二层认证方式.这种方式支持在 ...

  2. 2018.5.29 Oracle连接到空闲例程

    解决方法如下: 1.通过cmd命令窗启动Oracle:(最好是以管理员身份启动) C:\Users\Administrator>sqlplus /nolog SQL>conn /as sy ...

  3. 使用PinYin4j,获取汉字的拼音字母

    需要导入的文件 <!-- 引入pinyin4J的依赖 --> <dependency> <groupId>com.belerweb</groupId> ...

  4. 使TextBox的内容换行

    首先你把TextBox控件的MultiLine属性设置为True,然后把TextBox控件的Text属性根据程序需要,在需要换行的地方加入\r\n这样就可实现换行了

  5. vuex:使用思路总结

    1. vuex是什么? 是一种数据状态管理机制. 2.vuex的构成和作用: state: 存放需要被管理的属性的对象 getters: 方便在state中做集中处理,可以把state作为第一个参数 ...

  6. Java算法面试题:编写一个程序,将e:\neck目录下的所有.java文件复制到e:\jpg目录下,并将原来文件的扩展名从.java改为.jpg

    package com.swift; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; i ...

  7. MitmProxy使用

    安装 tar -zxvf mitmproxy-3.0.1-linux.tar.gz sudo mv mitmproxy mitmdump mitmweb /usr/bin 详情 https://ger ...

  8. forEach 以及 IE兼容

      语法 array.forEach(function(currentValue, index, arr), thisValue) 参数 参数 描述 function(currentValue, in ...

  9. awk截取指定字段

    #!/bin/bash #好多地方可以优化,先记录下,便于以后使用 dir="/logs/$1"file="/logs/$1/requests.log"if [ ...

  10. MySQL-Xtrabackup备份还原

    前言 通常我们都是使用xtrabackup工具来备份数据库,它是一个专业的备份工具,先来简单介绍下它. Xtrabackup percona提供的mysql数据库备份工具,惟一开源的能够对innodb ...