当前位置: 首页 > news >正文

AtCoder Grand Contest 066 B. Decreasing Digit Sums(构造 打表找规律)

题目

给定一个n(n<=50),记f(x)是x各数位的加和,例如f(331)=3+3+1=7

要求输出一个x(1\leq\ x \leq 10^{10000}),且对于任意i∈[1,n],均有f(2^{i-1}x)>f(2^ix)成立

思路来源

jiangly B站讲解

题解

首先n没啥用,构造一个n=50成立的case即可,

给定一个x,将x乘以2后,数位和变小,乘以50次都变小

考虑变小怎么做,逆向考虑,

假设终态是10000(若干个0),如果*2=10000变小,

前一项就是5000,这样不断除以2,2500,1250,...

发现前面若干项是变小的,中间也有变大的

乘以若干个2得到最后的10000,那么原始就是不带2的,也就是5的j次方

构造5的j次方,每个*2的时候,都会变小几次,然后变大一次,整体趋势变小,偶有变大

拼接到一起,就能抵消这个偶有变大的情况,只要整体趋势是变小多,变大少

打表发现拼接5的1次方到5的100次方即可,总长度也没有超限

也可以中间补0让各段独立,不过删掉0发现也没有违反性质

Bonus

考虑变大怎么做,

手玩发现,9的时候,会变大,如9,18,36,72,144,288,

144->288会变大,具体打表可以后面虽然有变小的时候,但整体的趋势是变大

拼接9,18,36这些数即可,例如9000000001800000036...

只要整体趋势是变大多,变小少,

且拼接的足够长,那么整体趋势一定是变大

代码

# def f(n):
#     s = str(n)
#     ans = 0
#     for c in s:
#         ans += ord(c) - ord('0')
#     return anss = ''
for i in range(100):v = 5 ** is += str(v)
n = int(s)
print(n)
# for i in range(51):
#     print(f"i:{i} f:{f(n)}")
#     n*=2

http://www.lryc.cn/news/330084.html

相关文章:

  • Hadoop系列总结
  • 【第三方登录】Twitter
  • C++经典面试题目(十七)
  • DFS2 C++
  • 2021-08-06
  • Centos服务器Open Gauss 部署
  • Vue与Electron融合之道:从Web App到桌面App的华丽转身
  • Higress 基于自定义插件访问 Redis
  • Mysql的库函数
  • 绿联 安装onlyoffice容器并启用Cloudreve的office在线预览与编辑功能
  • 金钱卦起卦
  • 学透Spring Boot 003 —— Spring 和 Spring Boot 常用注解(附面试题和思维导图)
  • 新能源汽车充电桩常见类型及充电桩站场的智能监管方案
  • 让工作自动化起来!无所不能的Python
  • Facebook轮播广告是什么?投放过程中有哪些需要注意的吗?
  • 3、jvm基础知识(三)
  • leetcode414-Third Maximum Number
  • 解决Quartus与modelsim联合仿真问题:# Error loading design解决,是tb文件中没加:`timescale 1ns/1ns
  • vue使用elementui组件的的对话框;使用ref
  • 第十四届蓝桥杯(八题C++ 题目+代码+注解)
  • HTTP协议格式详解之报头(HTTP header)、请求正文(body)
  • [yolox]ubuntu上部署yolox的ncnn模型
  • YOLOv9改进策略 :IoU优化 | 提出一种新的Shape IoU,更加关注边界框本身的形状和尺度,对小目标检测也很友好
  • 如何使用KST指标进行多头交易,Anzo Capital一个条件设置
  • 【QT进阶】第十三章QT动画类的使用QAbstractAnimation
  • 【机器学习】揭秘无监督学习:机器如何自我学习发现数据奥秘
  • 鸿蒙(HarmonyOS)ArkTs语言基础教程(大纲)
  • 掌握未来商机:如何利用会话式AI赢在起跑线
  • 软考高级架构师:数据传输控制方式:程序控制方式、程序中断方式、DMA方式、通道方式、IO处理机
  • 大模型之路2:继续趟一条小路