继续搞这道题!!!.py

不对,思路好像不同,再见

1 个赞

i*i*i>n就可以不再往下了

正确的

1 个赞

我猜AC了

1 个赞

@刘子睿 AC了吗??

WA,包WA的

1 个赞

WA(你猜的真准)

1 个赞

image

1 个赞

窝无法理解你的代码,所以我走了

1 个赞

主要看二分

1 个赞

至少TLE解决了

WA其实挺简单的

就是先枚举第一个边长,然后二分第二个边长

1 个赞

@王天皓 啊对

1 个赞
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[200005],a1[200005], idx;    ll n, m;
bool check(ll x){
    if(x*x*x>=m) return 1;
    else return 0;
}
int main(){
    ll t;
    cin >> t;
    while(t--){
        cin >> n;
        ll b=1;
        for(ll i=1;i*i*i<=n;i++){
            m=n-i*i*i;
            ll l=0;
            ll r=m;
            ll mid;
            while(r>l){
                mid=(l+r)/2;
                if(check(mid)){
                    l=mid+1;
                }
                else{
                    r=mid;
                }
            }
            if(r==0) b=0;
        }
        if(b) cout << "YES" << endl;
        else cout<<"NO" << endl; 
    }
}
1 个赞

这句话啥意思?

1 个赞

我是

1 个赞

其实你不同二分也可以

因为时间复杂度(再不用二分的情况下)最坏是O(10^5)

for (ll a = 1; a * a * a <= x; a++)
		{
			ll tmp = x - a * a * a;
			ll b;
			if (check(tmp, b)
			{
				if (b >= 1)
				{
					flag = true;
					break;
				}
			}
		}

改成这样子