分享一个非正解的做法

本题解内存最低(\(\le1\rm MiB\))

但是不开O2会tle

思路:每个数字仅会更新出1个新的数字,而且这个新数字比旧数字最多也就大70多。所以这里还是利用“筛数”的思想枚举所有数字筛数字,但这里我开一个小根堆来存储当前已经被发现不是自我数但是还未被遍历到的数字。从小到大遍历所有数字,如果堆是空的,或者堆顶(也就是堆里最小数字)不是当前遍历数字说明这个数字是自我数,统计进ans,输出ans即可

对于k个询问,我们从小到大排序离线操作,再开一个指针pos表示当前询问查询到哪个询问,并随着i的更新来更新询问。最后按照初始id把询问排序回去输出。

具体可见代码实现:

#include <bits/stdc++.h>
using namespace std; struct ask
{
int id, x, y;
}a[5010]; int n, k, tot, ans, pos;
priority_queue<int, vector<int>, greater<int> >q; bool cmp1(const ask &x, const ask &y)
{
return x.x < y.x;
} bool cmp2(const ask &x, const ask &y)
{
return x.id < y.id;
} int make(int x)
{
int res = x;
while (x > 0)
{
res += x % 10;
x /= 10;
}
return res;
} int main()
{
scanf("%d%d", &n, &k);
for (int i = 1; i <= k; i++)
{
a[i].id = i;
scanf("%d", &a[i].x);
}
sort(a + 1, a + 1 +k, cmp1);
for (int i = 1; i <= n; i++)
{
if (q.empty() || q.top() != i)
{
tot++;
if (a[pos].x < i)
pos++;
while (a[pos].x == tot)
{
a[pos].y = i;
pos++;
}
pos--;
ans++;
}
else
while (!q.empty() && q.top() == i)
q.pop();
q.push(make(i));
}
printf("%d\n", ans);
sort(a + 1, a + 1 + k, cmp2);
for (int i = 1; i <= k; i++)
printf("%d%c", a[i].y, i == k ? '\n' : ' ');
return 0;
}

让我们一起膜拜大佬林瑞堂@olinr

luogu1900 自我数的更多相关文章

  1. [转载]数学【p1900】 自我数

    题目描述-->p1900 自我数 本文转自@keambar 转载已经原作者同意 分析: 思路还是比较好给出的: 用类似筛选素数的方法筛选自我数. 但是要注意到题目限制的空间仅有4M,不够开10^ ...

  2. P1900 自我数

    题意: 对于每一个正整数n,我们定义d(n)为n加上它每一位数字的和. 例如,d(75)=75+7+5=87.给定任意正整数n作为一个起点,都能构造出一个无限递增的序列:n, d(n), d(d(n) ...

  3. 洛谷 P1900 自我数

    P1900 自我数 题目描述 在1949年印度数学家D. R. Daprekar发现了一类称作Self-Numbers的数.对于每一个正整数n,我们定义d(n)为n加上它每一位数字的和.例如,d(75 ...

  4. SGU Volume 1

    SGU 解题报告(持续更新中...Ctrl+A可看题目类型): SGU101.Domino(多米诺骨牌)------------★★★type:图 SGU102.Coprimes(互质的数) SGU1 ...

  5. 拨开迷雾,找回自我:DDD 应对具体业务场景,Domain Model 到底如何设计?

    写在前面 除了博文内容之外,和 netfocus 兄的讨论,也可以让你学到很多(至少我是这样),不要错过哦. 阅读目录: 迷雾森林 找回自我 开源地址 后记 毫无疑问,领域驱动设计的核心是领域模型,领 ...

  6. [LeetCode] Two Sum 两数之和

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  7. 自我反思--table的简单数据分页

      自我反思   几天没有写工作总结了,整个人都变得懒散了.公司的工作也确实是不紧张,对于我这种自制力不强的人简直是...(想不到词了),完全放了风了... 每天逛逛淘宝,买些乱七八糟其实并没有什么用 ...

  8. IT人的自我导向型学习:学习的4个层次

    谈起软件开发一定会想到用什么技术.采用什么框架,然而在盛行的敏捷之下,人的问题逐渐凸显出来.不少企业请人来培训敏捷开发技术,却发现并不能真正运用起来,其中一个主要原因就是大家还没有很好的学习能力.没有 ...

  9. bzoj 2876: [Noi2012]骑行川藏 拉格朗日数乘

    2876: [Noi2012]骑行川藏 Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1033  Solved: ...

随机推荐

  1. redis学习一 大体概述

    redis 命令查找:http://doc.redisfans.com/ 1,redis 技术简介以及疑问      redis是一个开源的,内存存储的数据结构服务器.可以用做数据库,高速缓存和消息队 ...

  2. js和jQuery判断数组是否包含指定元素

    最近遇见一些前台基础性问题,在这里笔者觉得有必要记录一下,为了以后自己查阅或者读者查看. 已知var arr = ['java','js','php','C++']; 问题:arr数组是否包含‘jav ...

  3. AudioFormat

    AudioFormat   用于访问 一系列语音格式和通道配置常量 例如用于AudioTrack 和AudioRecord中 The AudioFormat class is used to acce ...

  4. Windows系统上release版本程序bug跟踪解决方案-.dmp文件。

    使用场景: Win32程序在release模式下编译完成,发送给最终用户使用时,我们的程序有时候也会出现崩溃的情况,这个时候如果能快速定位崩溃原因或提供一些程序崩溃时的状态信息,对我们解决问题将会带来 ...

  5. mssql error 26

    右击数据库选择“方面”,将“RemoteAccessEnabled”属性设为“True”,点“确定”

  6. 面试题: 1天的java面试题 已看1

    1,自我介绍下,我直接说的项目经历,(哪年在哪个公司呆过) 2,问是否有带过团队的经历,我说去年带过一次. 3,Struts是单例模式还是多例模式?我先说单例模式,后说多例模式. Struts1是单例 ...

  7. 通过id设置的css属性和通过元素设置的css属性冲突了,优先级哪个高?

    ---恢复内容开始--- <!DOCTYPE html> <html> <head> <title>div test</title> < ...

  8. Git 之 协同开发

    GitHub中多人协同开发和单人开发还是有点差别,协同开发一般有两种方式: 合作者,将其他用户添加到仓库合作者中之后,该用户就具有向当前仓库提交代码. 组织,创建一个组织,然后再该组织下可以创建多个项 ...

  9. Integer类的parseInt和valueOf的区别

    我们平时应该都用过或者见过parseInt和valueOf这两个方法.一般我们是想把String类型的字符数字转成int类型.从这个功能层面来说,这两个方法都一样,都可以胜任这个功能. 但是,我们进入 ...

  10. SDUT 3377 数据结构实验之查找五:平方之哈希表

    数据结构实验之查找五:平方之哈希表 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 给定的一组 ...