
#include <bits/stdc++.h>
using namespace std;
int n,question,i,j,num;
int main(){
set<int> s;
typedef pair<int,int> p;
map<int,vector<p> > mp;
cin>>n;
for(i=1;i<100;i++){
for(j=i+1;j<100;j++){
num=i*i+i*j+j*j;
s.insert(num);
mp[num].push_back({i,j});
}
}
for(int i = 0; i < n; i++){
cin>>question;
if(!s.count(question)){
question = *s.upper_bound(question);
cout<<"No "<<question<<endl;
}else
cout<<"Yes\n";
for(auto &o: mp[question])
cout<<o.first<<" "<<o.second<<endl;
}
return 0;
}
这段代码实现了一个寻找1到100之间两数平方和等于目标数值的三元组的功能。它使用了集合和映射数据结构,通过两层循环计算每个数对的平方和,将结果存入映射中,以便快速查找是否存在目标平方和。

被折叠的 条评论
为什么被折叠?



