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

P12949 [GCJ Farewell Round #1] ASCII Art 题解

P12949 [GCJ Farewell Round #1] ASCII Art 题解

题目传送门

我的博客

前言

倍增+二分

思路

  • 首先第一步,我们肯定要去求第 \(n\) 个字符位于第几个循环里。

  • 第二步,求第 \(n\) 个字符在这个循环里的位置。

  • 不难发现,解决第一步后,第二步也就迎刃而解了。

首先第一步。
\(k\) 个循环里面一共有 \(26k\) 个字符。那么前 \(k\) 次循环就一共有 \(\sum_{i=1}^k 26i\) 个字母。记为 \(f(i)\)

化简可得

\[f(i) = 26 \times \sum_{i=1}^k k \]

运用等差数列求和公式,可以进一步化简为

\[f(i) = 26 \times \frac{i \times (i+1)}{2} \]

\[f(i) = 13 \times i \times (i+1) \]

那么我们要求的 \(k\) 就需要满足

\[f(k-1) \leq n \leq f(k) \]

暴力计算显然会T,于是考虑倍增求出大致范围,再用二分确定具体 \(k\) 值。

第二步。

由第一步我们可以求出具体 \(k\) 值,于是第 \(k\) 次循环就有 \(26k\) 个字母。也就是说每个字母都出现 \(k\) 次且顺序出现。则第 \(k\) 次循环的起始位置就是 \(f(k-1)+1\)。假设 A 是第 \(0\) 个字母,那么第二步的答案就呼之欲出了——

\[\lfloor \frac{n-(f(k-1)+1)}{k} \rfloor \]

代码

#include<cstdio>
#include<iostream> 
using namespace std;
#define int long long 
inline int Read(){int x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-48;c=getchar();}return x*f;
}
inline void Write(int x){if(x<0){x=-x;putchar('-');}if(x>9) Write(x/10);putchar(x%10+'0');
}
int T,n;
int calc(int x){//计算f函数return 13*x*(x+1);
}
signed main(){T=Read();for(int o=1;o<=T;o++){//别忘了输出格式n=Read();int l=1,r=1,ans=0;while(calc(r-1)<n) l=r,r<<=1;//倍增求大体范围while(l<=r){//二分求具体范围int mid=(l+r)>>1;if(calc(mid)>=n) r=mid-1,ans=mid;else l=mid+1;} int st=calc(ans-1)+1;//起始位置ans=(n-st)/ans;//最终答案printf("Case #%lld: ",o);printf("%c\n",(char)ans+'A');//别忘了强制类型转换,否则输出为数字}return 0; 
}
http://www.jsqmd.com/news/30355/

相关文章:

  • 高级专家/初阶架构师)的面试模拟
  • andriod集成x5内核
  • 为什么 VS Code 停止调试后 Python 进程还在?
  • Jenkins更换IP后,访问速度慢的问题解决.251103
  • Modbus协议地址模型详解学习笔记
  • 首次博客
  • CF2161 Pinely Round 5 (Div. 1 + Div. 2) 游记(VP)
  • 以太网交换技术
  • 2025-11-03 NOIP 模拟赛1 赛后总结
  • flex:1 什么意思
  • 以销定采是什么?为什么越来越重要?
  • 2025年优质少儿编程机构揭秘:提供国家等级测评+优质的课程体系+一站式赛考服务!
  • Modbus协议功能码详解学习笔记
  • 议论文素材分类整理
  • 使用WSL挂载U盘及SD卡外设的方案
  • ESP32 I2C通信
  • day06-自动出题工作流
  • 推送docker镜像到github
  • 软件工程学习日志2025.11.3
  • day05-智能换脸-12306出行建议-提取音频工作流
  • x./AC自动机
  • P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题
  • SQL Server 并发控制 第四篇:Snapshot Isolation (SI) 和 Read Committed Snapshot Isolation (RCSI)
  • godot 描边插件
  • 怎么在现有App里融入AI对话能力
  • DFS 序 O(1) 求 LCA
  • @pytest.fixture和setup/teardown
  • 矿山通信如何实现全域一体化?迈威为煤矿装上了“智慧神经网络”
  • Java异常处理实战精要:构建稳定应用的基石
  • €$P2025