洛谷 - B4276 [藍橋杯青少年組國賽 2023] 八進制回文平方數 - 題解
主要思路
首先,這道題范圍在 \(10^9\),我們不可能直接從 \(1\) 循環到 \(N\)。我們不難看出,這道題是求平方數的八進制是否回文,那些不是平方數的例如 \(2\) 呀,\(3\) 呀這些都是不用考慮的。我們循環也只用從 \(1\) 到 \(\left\lfloor\sqrt{n}\right\rfloor\) 就可以了。這樣,時間復雜度就大大降低了。其余部分就沒什么好說的了,詳見代碼。
AC 代碼:
#include<iostream>
using namespace std;
string l0z8(int n){
string s;
while(n){
s=char(n%8+48)+s;
n/=8;
}
return s;
}
bool isHw(int n){
string s=l0z8(n);
int l=0,r=s.size()-1;
while(l<=r){
if(s[l]!=s[r])return 0;
l++,r--;
}
return 1;
}
int main(){
int n;
cin>>n;
for(int i=1;i*i<=n;i++){
if(isHw(i*i)){
cout<<i*i<<' ';
}
}
return 0;
}
代碼時間復雜度:\(\mathcal O\left(4\times\log_88\times\left\lfloor\sqrt{n}\right\rfloor\right)\)
本文來自博客園,作者:longyitongxue,轉載請注明原文鏈接:http://www.rzrgm.cn/Lytx-Luogu1145420/p/18808885/lqb______luoguti-b4276

浙公網安備 33010602011771號