zoukankan      html  css  js  c++  java
  • Equations(hdu 1496 二分查找+各种剪枝)

    Equations

    Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 6927    Accepted Submission(s): 2810


    Problem Description
    Consider equations having the following form:

    a*x1^2+b*x2^2+c*x3^2+d*x4^2=0
    a, b, c, d are integers from the interval [-50,50] and any of them cannot be 0.

    It is consider a solution a system ( x1,x2,x3,x4 ) that verifies the equation, xi is an integer from [-100,100] and xi != 0, any i ∈{1,2,3,4}.

    Determine how many solutions satisfy the given equation.
     
    Input
    The input consists of several test cases. Each test case consists of a single line containing the 4 coefficients a, b, c, d, separated by one or more blanks.
    End of file.
     
    Output
    For each test case, output a single line containing the number of the solutions.
     
    Sample Input
    1 2 3 -4
    1 1 1 1
     
    Sample Output
    39088
    0
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <iostream>
     5 #include <cmath>
     6 using namespace std;
     7 int a,b,c,d;
     8 int s[101];
     9 int search(int mid,int k)
    10 {
    11     return c*s[k]+d*s[mid];
    12 }
    13 void init()
    14 {
    15     for(int i=1;i<=100;i++)    s[i]=i*i;
    16 }
    17 int main()
    18 {
    19     int i,j,k,ans,y;
    20     freopen("in.txt","r",stdin);
    21     init();
    22     while(cin>>a>>b>>c>>d)
    23     {
    24         ans=0;
    25         if(a>0&&b>0&&c>0&&d>0||a<0&&b<0&&c<0&&d<0){
    26             printf("0
    ");
    27             continue;
    28         }
    29         for(i=1;i<=100;i++)
    30         {
    31             for(j=1;j<=100;j++)
    32             {
    33                 int sum=a*s[i]+b*s[j];
    34                 if(sum>0&&c>0&&d>0||sum<0&&c<0&&d<0)    continue;
    35                 for(k=1;k<=100;k++)
    36                 {
    37                     int p=0-sum-c*s[k];
    38                     if(p%d==0)
    39                     {
    40                         p=p/d;
    41                         if(binary_search(s+1,s+101,p))    ans++;
    42                     }
    43                 }
    44             }
    45         }
    46         cout<<ans*16<<endl;
    47     }
    48 }
  • 相关阅读:
    矢量坐标矩阵 为了方便求叉乘
    力矩 是形容物理转动效果的量
    科式力 河流右边冲刷严重
    科式力
    证明科式力 coriolis acceleration
    叉乘的求导证明
    spring webFlux的认识
    [转] DB2错误代码说明
    MySQL事务及其实现
    MySQL基础架构之查询语句执行流程
  • 原文地址:https://www.cnblogs.com/a1225234/p/5065046.html
Copyright © 2011-2022 走看看