借鉴了一下其他大佬的解体思路:
这道题的本质是一道数学题:
通过分裂得到更多的魔法棒,每次分裂的最小的增量为3(选择一个小魔法棒,将其分裂为4根),如果能够找到连续的3个能通过分裂得到数a,a+1,a+2,那么a以后的数都可以由分裂所得。
假设设x = a+m,将m对3取余得r,这个r一定是0,1,2中的一个数那么x可以视为 a+r通过若干个3的增量得到的,
下面证明15,16,17为3个连续的可以通过分裂得到的数:
15 = 4+3+8
16 = 1+3*5;
17 = 9+8;
所以只需要找出15之前复合要求的数即可.除去完全平方数,剩下的是7(4+3),10(7+3),13(10+3),12(9+3),当x等于这些数的时候输出yes即可
#include<bits/stdc++.h>
using namespace std;
void solve(){
long long x;
cin>>x;
long long q = sqrt(x);
if(x==q*q || x>=15 ||x==12 || x==7 ||x==10 || x==13){
cout<<"Yes"<<endl;
return;
}
cout<<"No"<<endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin>>t;
while(t--){
solve();
}
}

京公网安备 11010502036488号