题解
2024-12-07 20:48:35
发布于:广东
9阅读
0回复
0点赞
前置知识:位运算,builtin函数
一个数取相反数其实就是取这个数的反码然后+1,稍微推理一下我们会发现 n & -n
就可以取到这个数的最低位,如果这个数为 显然就代表 能表示为 的正整数次幂.
__builtin_ctz(n)
可以返回 最右边有多少个连续的 ,于是可以得到以下代码
#include <iostream>
#include <cstdio>
using namespace std;
int a[100005];
int main(){
cin.tie(nullptr) -> sync_with_stdio(0);
cout.tie(nullptr) -> sync_with_stdio(0);
int n;
cin >> n;
if((n & -n) == n){
int tmp = __builtin_ctz(n);
if((tmp & -tmp) == tmp){
cout << "perfect";
}else cout << "good";
}else cout << "general";
return 0;
}
这里空空如也
有帮助,赞一个