B. Phoenix and Puzzle
题面:
中文题意:
给你一个数,问你能不能由该数量个等腰三角形构成一个正方形。重点在于正方形是由平方数个的由2个组成或者由4个组成的小正方形组成。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 114514;
ll n;
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T;
cin >> T;
map<ll, ll> mp;
for (int i = 0; i < maxn; i++) {
ll temp = i * i;
mp[temp] = i;
//sqrt有点危险,用此map避免使用。
}
while (T--) {
cin >> n;
if (n % 2) {
cout << "no" << endl;
//奇数肯定不行啊。
continue;
} else if (n % 4 == 0) {
n /= 4;
if (mp[n] * mp[n] == n) {
//意思是平方数个4个三角形。
cout << "yes" << endl;
continue;
} else n *= 4;
}
n /= 2;
if (mp[n] * mp[n] == n) {
//意思是平方数个2个三角形。
cout << "yes" << endl;
continue;
}
cout << "no" << endl;
}
}