2020“图灵杯”趣味网络邀请赛 B. 回文串(构造+二分)
2020“图灵杯”趣味网络邀请赛 B. 回文串
题解
- 第一档部分分存在 k k k使得 m = k ( k + 1 ) / 2 m=k(k+1)/2 m=k(k+1)/2起到了很大提示作用(其实没有的话也十分容易想到),
- 回文串最多必然是所有字符相同,此时需满足 m = k ( k + 1 ) / 2 ( k ∈ Z ) m=k(k+1)/2(k\in Z) m=k(k+1)/2(k∈Z),则答案为 k k k个 a a a;不满足时,可以尽可能增大 k k k的值,使总长度接近 m m m,中间再用两个字符 b c bc bc隔开,然后剩下的部分再找到最大的 k k k,继续做下去直到 m m m剩余 0 0 0。其中 k k k的取值可以解方程或二分。
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
#define ld long double
ll read() {
ll s = 0;
char x = getchar();
while(x < '0' || x > '9') x = getchar();
while(x >= '0' && x <= '9') s = s * 10 + x - 48, x = getchar();
return s;
}
int main() {
int tn = read();
while(tn--) {
int n = read();
while(n) {
int l = 1, r = n, t;
while(l <= r) {
int mid = (l + r) / 2;
if(mid * (mid + 1) / 2 <= n) t = mid, l = mid + 1; else r = mid - 1;
}
for(int i = 1; i <= t; i++) printf("a");
n -= t * (t + 1) / 2;
if(n == 1) printf("b"), n--;
else if(n >= 2) printf("bc"), n -= 2;
}
printf("\n");
}
return 0;
}
哈哈哈哈哈哈哈哈哈哈
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· .NET Core GC压缩(compact_phase)底层原理浅谈
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp