专栏文章

题解:B4276 [蓝桥杯青少年组国赛 2023] 八进制回文平方数

B4276题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipoq15x
此快照首次捕获于
2025/12/03 15:27
3 个月前
此快照最后确认于
2025/12/03 15:27
3 个月前
查看原文

思路

60 分

我们可以写一个函数 check,判断这个数的八进制是否回文且这个数是否是平方数。但不难发现:10910^9 的数据显然是抗不下来的,一定会 TLE。

正解(100 分)

由于我们需要缩小时间复杂度,因此我们可以直接在 for 循环里就设成 i×ii \times i 了,就直接去判断每个平方数的八进制是否回文,减少了许多不必要的损失。

代码

CPP
#include <bits/stdc++.h>
using namespace std;
inline bool check(int x){
	bool f=0;
	vector<int> v;
	while(x){
		v.push_back(x%8);
		x/=8;
	}
	string s="";
	for(int i=v.size()-1;i>=0;i--){
		s.push_back(v[i]+'0');
	}
	string res=s;
	reverse(res.begin(),res.end());
	f=(res==s);
	return f;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr),cout.tie(NULL);
	int N;
	cin>>N;
	for(int i=1;i*i<=N;i++){
		if(check(i*i)){
			cout<<i*i<<' '; 
		}
	}
	return 0;
} 

评论

0 条评论,欢迎与作者交流。

正在加载评论...