• HDU1496Equations【hash】


    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 <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 const int mod = 40007;
     7 
     8 struct Node {
     9     int to;
    10     int next;
    11 }e[mod + 10];
    12 
    13 int head[mod + 10];
    14 
    15 int tot;
    16 
    17 void Add(int u, int v) {
    18     e[tot].to = v;
    19     e[tot].next = head[u];
    20     head[u] = tot++;
    21 }
    22 
    23 int Find(int u, int v) {
    24     int cnt = 0;
    25     for(int i = head[u]; i; i = e[i].next) {
    26         if(e[i].to == v) cnt++;
    27     }
    28     return cnt;
    29 }
    30 
    31 void init() {
    32     memset(head, 0, sizeof(head));
    33     tot = 1;
    34 }
    35 
    36 int Fabs(int x) {
    37     return x > 0 ? x : - x;
    38 }
    39 
    40 int pre[105];
    41 
    42 int main() {
    43     int a, b, c, d;
    44     for(int i = 1; i <= 100; i++) {
    45         pre[i] = i * i;
    46     }
    47     while(EOF != scanf("%d %d %d %d",&a, &b, &c, &d) ) {
    48         init();
    49         for(int i = 1; i <= 100; i++) {
    50             for(int j = 1; j <= 100;    j++) {
    51                 int num = a * pre[i] + b * pre[j];
    52                 int p = Fabs(num) % mod;
    53                 Add(p, num);
    54             }
    55         } 
    56         int ans = 0;
    57         for(int i = 1; i <= 100; i++) {
    58             for(int j = 1; j <= 100;    j++) {
    59                 int num = c * pre[i] + d * pre[j];
    60                 int p = Fabs(num) % mod;
    61                 ans += Find(p, - num);
    62             }
    63         } 
    64         printf("%d
    ", ans << 4);
    65     }
    66     return 0;
    67 }
    View Code
  • 相关阅读:
    perl 升级到5.20版本
    perl 升级到5.20版本
    Group Commit of Binary Log
    Group Commit of Binary Log
    docker exec 运行命令
    docker exec 运行命令
    mysql timestamp 值不合法问题
    mysql timestamp 值不合法问题
    ulimit 说明
    /etc/security/limits.conf 配置
  • 原文地址:https://www.cnblogs.com/zhanzhao/p/3991395.html
Copyright © 2020-2023  润新知