zoukankan      html  css  js  c++  java
  • POJ 1840 HASH

    题目链接:http://poj.org/problem?id=1840

    题意:公式a1x1^3+ a2x2^3+ a3x3^3+ a4x4^3+ a5x5^3=0,现在给定a1~a5,求有多少个(x1~x5)的组合使得公式成立。并且(x1~x5)取值再[-50,50]且不能为0

    思路:因为x的值范围比较小,只有100.所以可以先求出 a1x1^3+a2x2^3+a3x3^3. 然后在求 (-1)*(a4x4^3+a5x5^3)从前面的所得的Hash表进行二分查找。

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<cstdio>
    #include<vector>
    #include<cmath>
    #include<time.h>
    #include<map>
    using namespace std;
    typedef long long int LL;
    const int MAXN=1000000+5;//100^3
    int a,b,c,d,e;
    int Hash[MAXN];
    int main(){
    #ifdef kirito
        freopen("in.txt","r",stdin);
        freopen("out.txt","w",stdout);
    #endif
        int start=clock();
        while(~scanf("%d%d%d%d%d",&a,&b,&c,&d,&e)){
            int cnt=0,ans=0;
            for(int i=-50;i<=50;i++){ //make a1x1^3+a2x2^3+a3x3^3
                if(i==0){continue;}
                for(int j=-50;j<=50;j++){
                    if(j==0){continue;}
                    for(int k=-50;k<=50;k++){
                        if(k==0){continue;}
                        int Sum=a*i*i*i+b*j*j*j+c*k*k*k;
                        Hash[cnt++]=Sum;
                    }
                }
            }
            sort(Hash,Hash+cnt); //sorted
            for(int i=-50;i<=50;i++){ //make  (-1)*(a4x4^3+a5x5^3)
                if(i==0){continue;};
                for(int j=-50;j<=50;j++){
                    if(j==0){continue;}
                    int Sum=(-1)*(d*i*i*i+e*j*j*j);//the search number
                    for(int k=lower_bound(Hash,Hash+cnt,Sum)-Hash;k<cnt;k++){//binary search the number
                        if(Hash[k]!=Sum){
                            break;
                        }
                        else{
                            ans++; 
                        }
                    }
                }
            }
            printf("%d
    ",ans);
        }
    #ifdef LOCAL_TIME
        cout << "[Finished in " << clock() - start << " ms]" << endl;
    #endif
        return 0;
    }
  • 相关阅读:
    1869六度分离
    hdu 2066 一个人的旅行
    HDU1424搬寝室
    poj 1511 Invitation Cards
    hdu 3999The order of a Tree
    hdu 2680 Choose the best route
    Hdu 3117 Fibonacci Numbers
    hdu 2962 Trucking
    钽电容黑色和黄色的区别
    ALTER FPGA通过软件设置上拉(转)
  • 原文地址:https://www.cnblogs.com/kirito520/p/5659468.html
Copyright © 2011-2022 走看看