离线 + 位优化 - SGU 108 Self-numbers 2

简介: SGU 108 Self-numbers 2  Problem's Link   Mean:  略有这样一种数字:对于任意正整数n,定义d(n)为n加上n的各个位上的数字(d是数字的意思,Kaprekar发明的一个术语)。

SGU 108 Self-numbers 2 

Problem's Link


 

Mean: 

略有这样一种数字:对于任意正整数n,定义d(n)为n加上n的各个位上的数字(d是数字的意思,Kaprekar发明的一个术语)。如:d(75) = 75 + 7 + 5 = 87。给定任意正整数n,你可以构建出无限的整数递增:n, d(n), d(d(n)), d(d(d(n))), ……举个例子,你从33开始,那么下一个数就是33 + 3 + 3 = 39, 再下一个就是39 + 3 + 9 = 51, 接着就是 51 + 5 + 1 = 57, 那样就生成了一个序列: 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ... 这里n叫做d(n)的母数 上面的数列中,33是39的母数,39是51的母数,51是57的母数,以此类推……有些数字不止一个母数,比如101有两个母数,91和100。没有母数的数字就叫做self-number。让a[i]成为第i个self-number。现在存在13个小于100的self-number: 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 和 97. (第一个 self-number是a[1]=1, 第二个是 a[2] = 3,  第十三个是 a[13]=97).

analyse:

此题比较BT,内存卡得比较紧,做的时候需要考虑如何压缩内存,不过还是1.5s把它过了.

主要方法就是用个滚动数组用类似筛法做,题目倒不是很难.

Time complexity: O(N)

 

view code

/**
* -----------------------------------------------------------------
* Copyright (c) 2016 crazyacking.All rights reserved.
* -----------------------------------------------------------------
*       Author: crazyacking
*       Date  : 2016-01-06-19.55
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long( LL);
typedef unsigned long long( ULL);
const double eps( 1e-8);


pair < int , int > q [ 5010 ];
bool f1 [ 64 ], f2 [ 64 ];
int ans [ 5010 ];
int num ,n , m;

int main()
{
    scanf( "%d %d" , &n , & m);
    for ( int i = 0; i < m; ++ i)
    {
        scanf( "%d" , & q [ i ]. first);
        q [ i ]. second = i;
    }
    sort( q , q + m);
    int pos = 0;
    memset( f1 , true , sizeof( f1));
    memset( f2 , true , sizeof( f2));
    for ( int i = 1; i <=n; ++ i)
    {
        if ( i % 64 == 0)
        {
            memcpy( f1 , f2 , 64);
            memset( f2 , true , sizeof( f2));
        }
        if ( f1 [ i % 64 ])
        {
            num ++;
            while ( q [ pos ]. first == num) ans [ q [ pos ++ ]. second ] = i;
        }
        int tmp = 0 , j = i;
        while ( j > 0)
        {
            tmp += j % 10;
            j /= 10;
        }
        if ( tmp + i % 64 >= 64) f2 [( tmp + i % 64) % 64 ] = false;
        else f1 [ tmp + i % 64 ] = false;
    }
    printf( "%d \n " , num);
    for ( int i = 0 , j; i < m; ++ i)
    {
        printf( "%d" , ans [ i ]);
        if ( i != m - 1) printf( " ");
        else printf( " \n ");
    }
    return 0;
}

 

目录
相关文章
GEE:如何批量处理并下载指定时间范围的月尺度NDVI数据集(MOD09GA为例)
GEE:如何批量处理并下载指定时间范围的月尺度NDVI数据集(MOD09GA为例)
678 0
|
4月前
|
算法
无损加速最高5x,EAGLE-2让RTX 3060的生成速度超过A100
【8月更文挑战第5天】EAGLE-2是一种针对大型语言模型(LLMs)的无损加速算法,通过上下文感知的动态草稿树技术显著提升推理速度。它利用小型模型快速生成草稿,并依据置信度动态调整草稿树结构以提高标记接受率。实验表明EAGLE-2在多种任务上实现2.5x至5x的加速比,且不影响生成质量。相较于其他加速方法,EAGLE-2更高效可靠。[论文链接: https://arxiv.org/pdf/2406.16858]
60 11
|
6月前
|
人工智能 资源调度 算法
内附原文|SIGMOD’24:百万核的智能调度,云数仓如何结合AI处理用户混合负载
论文提出的Flux通过使用AI技术将短时和长时查询解耦进行自动弹性,解决了云数据仓库的性能瓶颈,同时支持了资源按需预留。Flux优于传统的方法,查询响应时间 (RT) 最多可减少75%,资源利用率提高19.0%,成本开销降低77.8%。
内附原文|SIGMOD’24:百万核的智能调度,云数仓如何结合AI处理用户混合负载
|
7月前
|
监控 数据处理
R语言HAR和HEAVY模型分析高频金融数据波动率
R语言HAR和HEAVY模型分析高频金融数据波动率
|
SQL 存储 NoSQL
【XL-LightHouse】开源通用型流式大数据统计系统介绍
XL-LightHouse是针对互联网领域繁杂的流式数据统计需求而开发的一套集成了数据写入、数据运算、数据存储和数据可视化等一系列功能,支持大数据量,支持高并发的【通用型流式大数据统计平台】。
【XL-LightHouse】开源通用型流式大数据统计系统介绍
|
机器学习/深度学习 编解码 人工智能
Faster RCNN超快版本来啦 | TinyDet用小于1GFLOPS实现30+AP,小目标炸裂(一)
Faster RCNN超快版本来啦 | TinyDet用小于1GFLOPS实现30+AP,小目标炸裂(一)
247 0
|
编解码 开发工具 计算机视觉
Faster RCNN超快版本来啦 | TinyDet用小于1GFLOPS实现30+AP,小目标炸裂(二)
Faster RCNN超快版本来啦 | TinyDet用小于1GFLOPS实现30+AP,小目标炸裂(二)
581 0
|
机器学习/深度学习 人工智能 测试技术
神经引擎这回行了吗?iPhone 14 Core ML性能测评已出
神经引擎这回行了吗?iPhone 14 Core ML性能测评已出
184 0
|
算法
m多载波MC-CDMA系统单用户检测方法的研究,对比EGC,MRC,ORC以及MMSE
m多载波MC-CDMA系统单用户检测方法的研究,对比EGC,MRC,ORC以及MMSE
159 0
m多载波MC-CDMA系统单用户检测方法的研究,对比EGC,MRC,ORC以及MMSE
|
存储 SQL 缓存
DDIA 读书分享 第三章(下):TP AP 和列存
DDIA 读书分享 第三章(下):TP AP 和列存
190 0
DDIA 读书分享 第三章(下):TP AP 和列存