C - 343
C - 343
https://atcoder.jp/contests/abc343/tasks/abc343_c
思路
先找出最大三次方数,次数小于或者等于 n,
参考:
在三次方根的可能范围内,使用二分查找法,定位最大的三次方根
https://www.cnblogs.com/Ghost-Knight/p/17970849
从此最大的三次方根开始,向下枚举, 枚举过程中对 三次方数进行是否回文的判定,
如果是回文,则停止。
Code
https://atcoder.jp/contests/abc343/submissions/50830008
ll n; ll low = 0; ll high = 1000000; int main() { cin >> n; ll left = 0; ll right = high; while(left < right-1){ // cout << "left="<<left << " right="<<right<<endl; ll middle = (left + right) / 2; ll cubic = middle*middle*middle; if (cubic == n){ left = middle; break; } else if (cubic < n){ left = middle; } else { right = middle; } } // cout << "left = " << left << endl; for (ll i=left; i>=0; i--){ ll cubic = i*i*i; ll cubic_origin = cubic; vector<int> digits; while(cubic){ int r = cubic%10; digits.push_back(r); cubic = cubic / 10; } // cout << "digits ====" << endl; // for(auto one: digits){ // cout << one << " "; // } // cout << endl; bool ishuiwen = true; int left = 0; int right = digits.size() - 1; while(left < right){ // cout << "digits[left]="<<digits[left]<< endl; // cout << "digits[right]="<<digits[right]<< endl; if (digits[left] != digits[right]){ ishuiwen = false; break; } left++; right--; } // cout << "ishuiwen=" << ishuiwen << endl; if (ishuiwen){ cout << cubic_origin << endl; break; } } return 0; }
出处:http://www.cnblogs.com/lightsong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2022-03-02 Next.js -- SSG of React
2021-03-02 Integrating Hub with one sklearn mnist example
2015-03-02 DOM based XSS Prevention Cheat Sheet(DOM Based XSS防御检查单)