题目

对于任意一个至少两位的正整数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)\)暴力计算

这暴力太优美了

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

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 32000,maxm = 1000000001,INF = 1000000000;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57) {out = (out << 3) + (out << 1) + c - '0'; c = getchar();}
return out * flag;
}
int cal(int n){
int x,p;
while (n / 10){
x = n; p = 1; n = 0;
while (x / 10) n += p * abs((x % 10) - (x / 10 % 10)),p *= 10,x /= 10;
}
return n;
}
int main(){
freopen("biao.txt","w",stdout);
printf("{");
int B = (int)sqrt(1000000000),now = 0,ans = 0;
for (int i = 1; i <= 1000000000; i++){
if (i / B > now) now = i / B,printf("%d,",ans),ans = 0;
if (cal(i) == 7) ans++;
}
printf("}");
/*while (true){
int n = read();
printf("%d\n",cal(n));
}*/
return 0;
}

AC程序【省略打表部分】

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 400005,maxm = 100005,INF = 1000000000;
int biao[]={/*此处过于壮观,就略去了*/};
int L,R;
int cal(int n){
int x,p;
while (n / 10){
x = n; p = 1; n = 0;
while (x / 10) n += p * abs((x % 10) - (x / 10 % 10)),p *= 10,x /= 10;
}
return n;
}
int main(){
cin>>L>>R; L--;
int ans = 0,T = (int)sqrt(1000000000),bl = L / T,br = R / T;
for (int i = bl; i < br; i++) ans += biao[i];
for (int i = br * T; i <= R; i++) ans += (cal(i) == 7);
for (int i = bl * T; i <= L; i++) ans -= (cal(i) == 7);
printf("%d\n",ans);
return 0;
}

洛谷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. python setup.py install 报错

    python setup.py install 报错信息 [root@VM_25_28_centos psutil-2.0.0]# python setup.py install running in ...

  2. LigerUi中表(Grid)控件的相关属性笔记

    http://blog.csdn.net/dxnn520/article/details/8216560 // ========================================= [每 ...

  3. Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码

    随着Jquery的作用越来越大,使用的朋友也越来越多.在Web中,由于CheckBox. Radiobutton . DropDownList等控件使用的频率比较高,就关系到这些控件在Jquery中的 ...

  4. 使用Vue CLI 3快速创建项目

    首先 vue create ant-design-vue-pro 执行命令会显示两个选项,1默认,2自定义 我么选择自定义 选择好自定义的插件回车就等待下安装成功然后进入项目文件夹 cd ant-de ...

  5. Vue3.0脚手架搭建

    https://www.jianshu.com/p/fbcad30031c2 vue3.0官网:https://cli.vuejs.org/zh/guide/ 介绍: notice: 这份文档是对应 ...

  6. vue axios 攻略

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特点: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支持 ...

  7. php获取随机字符串

    获取随机字符串 /** * 获取随机字符串 * @param int $randLength 长度 * @param int $addtime 是否加入当前时间戳 * @param int $incl ...

  8. java util - 中文、繁体转成拼音工具pinyin4j

    需要 pinyin4j-2.5.0.jar 包 代码例子 package cn.java.pinyin4j; import net.sourceforge.pinyin4j.PinyinHelper; ...

  9. POJ 2299 Ultra-QuickSort 简单题解

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 68874   Accepted: 25813 ...

  10. Thinkphp 支付宝插件的引入 和调用

    本文版权归本宝宝所有 未得允许不得转载 下载地址传送门 https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.twLYka&am ...