思路似乎不是正解欸
2024-06-02 17:43:56
发布于:北京
24阅读
0回复
0点赞
看到官方正解了,但是 函数里的东西跟我写的不太一样啊。那么,我就来一发本蒟蒻的题解吧
跟官方一样,用 存储完全平方数,在判断时,可以用“尺取法”(“双指针”)以 的时间复杂度扫一遍,最终就能得出结果了。
时间复杂度:
#include<iostream>
#include<vector>
using namespace std;
#define ll long long
ll t,n,l,r;
bool can;
vector<ll> tp;
int main(){
cin>>t;
for(ll i=0;i*i<=0x7fffffffll;i++) tp.push_back(i*i);//完全平方数
while(t--){
cin>>n;
l=0,r=tp.size()-1;
can=false;
while(l<=r){//双指针
if(tp[l]+tp[r]==n){
can=true;
break;
}
if(tp[l]+tp[r]<n) l++;
else r--;
}
if(can) cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}
本蒟蒻讲的很烂, 们不喜勿喷~
全部评论 1
点赞
2024-06-19 来自 浙江
0
有帮助,赞一个