zoukankan      html  css  js  c++  java
  • Croc Champ 2013 Round 2 (Div. 2 Edition) E. Cube Problem 解题报告

    很郁闷的一题,完全在考数学的不等式

    题目简化后的公式为 a^3+b^3+c^3+n=(a+b+c)^3,对其进行化简,

    最后的等式为 (a+b)(a+c)(b+c)=n/3

    假设 a<=b<=c,(注意求得a,b,c后对其进行排列,原本的a,b,c是没有顺序的)

    则 (a+b)<=(a+c)<=(b+c)

    三个数相乘必然有个数小于等于 开n/3的立方,有一个数大于等于开n/3的立方

    如  xy=n ,则 x <=  √n  ,y>= √n

    设 i=(a+b) , j = (a+c), k =(b+c),则 i<=j<=k

    令 n=n/3

    枚举 i=2....sqrt(n)

      则 j*k= n/i (注意要保证n/i是整数) (注意 j >= i)

      令m=n/i

      两个数相乘必然有个数小于等于 √m,有个数大于等于 √m

      则枚举 j = i..sqrt(m) (如果直接将j从i开始枚举会超时)

        则 k= m/j (同样要保证m/j是整数)

          a+b = i

          a+c=j

          b+c=k

        则 a = (i+j-k)/2, b=(i+k-j)/2 ,c=(j+k-i)/2   由于 a>0 注意 i+j > k  同时 (i+j-k)/2,(i+k-j)/2,(j+k-i)/2都要是整数

         a,b,c求出后对其排列计算其数目就行

    #include <iostream>
    #include <vector>
    #include <cmath>
    #include <algorithm>
    
    using namespace std;
    
    typedef long long LL;
    
    int main(){
        LL n;
        cin >> n;
        if( n%3 != 0){
            cout<<0<<endl;
            return 0;
        }
        n /= 3;
        int ans = 0;
        for(LL i = 2; i*i*i <= n ; i ++ ){
            if( n%i ) continue;
            LL m = n/i;
            for(LL j = max(i,(LL)(-i+sqrt(i*i+4*m))/2); j*j  <= m; j ++){
                if( m%j ) continue;
                LL k=m/j;
                if((i+j) > k){
                    if(i==j && j==k) ans +=1;
                    else{
                        if( (i+j-k)%2 || (i+k-j)%2 || (j+k-i)%2 ) continue;
                        else{
                            int a = (i+j-k)/2,b=(i+k-j)/2,c=(j+k-i)/2;
                            if(a == b && b == c) ans+=1;
                            if(a < b && b < c) ans+=6;
                            if( a== b && b < c) ans +=3;
                            if( a < b && b ==c ) ans +=3;
                        }
                    }
                }
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    

      

        

  • 相关阅读:
    前端切图:自制简易音乐播放器
    SEO那些事:一句代码一键分享网站
    POJ 2553 Tarjan
    POJ 2186 Tarjan
    POJ 1236 Tarjan算法
    POJ 1330 Tarjan LCA、ST表(其实可以数组模拟)
    POJ 1470 Tarjan算法
    POJ 1985 求树的直径 两边搜OR DP
    POJ 3687 拓扑排序
    POJ 3522 Kruskal
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3040558.html
Copyright © 2011-2022 走看看