2023/2/11信心upup赛后总结

什么构造题,会都不会

之前确实没怎么做过构造题,这下遇到了是真的麻。
image
这题还挺水的。主要是把题看错了,然后挂了。

iamhuman 这个串的每个字母,设 a[i] 为第 i 个字母在你的串中出现的次数,总方案即为
a[1]a[2]a[3]...a[n],为使串尽可能短,就需要让 a[1]..a[n] 间的每个数尽可能相等。枚举这样一个值,再进行一些微调即可。

#include<bits/stdc++.h> #define int long long using namespace std; const int MAXN = 1e5; long long qpow(int a,int n){ int ret =1; while(n){ if(n & 1)ret *= a; n /= 2; a = a* a; } return ret; } int k,a[MAXN + 5]; signed main(){ cin >> k; string s = "iamhuman"; int cnt = 1; while(1){ int m = qpow(cnt,8); if(m >= k){ int mul = 1; for(int i = 0; i < s.size(); i++){ mul *= cnt; a[i] = cnt; if(mul * qpow(cnt - 1,s.size() - i - 1) >= k){ break; } } for(int i = 0; i < s.size(); i++){ a[i] = max(a[i],cnt - 1); for(int j = 1; j <= a[i]; j++){ cout << s[i]; } } return 0; } ++cnt; } }

image
一眼,有这样一个方案:
image
中间绿色的方块都是满足周围四个方向都有方块的方块。假设有 n 个绿色的块,所有绿色加黑色的块就有 3n+4 个。

能水 80pts,但还有 n=300 这样的点,方块的总数按照刚才的方案肯定是超了 900 的。不得不换个思路。
image

显而易见的,这种构造方案的优于刚才的解。直接将红框部分反复输出并计数即可得到答案。


__EOF__

本文作者Never Gonna Give You Up!
本文链接https://www.cnblogs.com/CZ-9/p/17112221.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   腾云今天首飞了吗  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示