zoukankan      html  css  js  c++  java
  • hdu 1496(hash经典)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1496

    思路:一开始没想到加1000010来避免负数,orz....直接加负数就不用分类讨论了。

    View Code
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 const int MAXN=2000100;
     8 int mark[MAXN];
     9 
    10 
    11 int main(){
    12     int num[4];
    13     while(~scanf("%d",&num[0])){
    14         scanf("%d%d%d",&num[1],&num[2],&num[3]);
    15         sort(num,num+4);
    16         if(num[3]<0||num[0]>0){puts("0");continue;}
    17         memset(mark,0,sizeof(mark));
    18         int count=0;
    19         //注释部分也是ac代码。。。耗时略长
    20         /*
    21         if(num[1]<0){
    22             for(int i=1;i<=100;i++){
    23                 for(int j=1;j<=100;j++){
    24                     int s=-1*num[0]*i*i-num[1]*j*j;
    25                     mark[s]++;
    26                 }
    27             }
    28             int count=0;
    29             for(int i=1;i<=100;i++){
    30                 for(int j=1;j<=100;j++){
    31                     int s=num[2]*i*i+num[3]*j*j;
    32                     if(s<0)continue;
    33                     count+=mark[s];
    34                 }
    35             }
    36             printf("%d\n",count*16);
    37         }else {
    38             for(int i=1;i<=100;i++){
    39                 int s=-1*num[0]*i*i;
    40                 mark[s]++;
    41             }
    42             int count=0;
    43             for(int i=1;i<=100;i++){
    44                 for(int j=1;j<=100;j++){
    45                     for(int k=1;k<=100;k++){
    46                         int s=num[1]*i*i+num[2]*j*j+num[3]*k*k;
    47                         count+=mark[s];
    48                     }
    49                 }
    50             }
    51             printf("%d\n",count*16);
    52         }*/
    53         for(int i=1;i<=100;i++){
    54             for(int j=1;j<=100;j++){
    55                 mark[num[0]*i*i+num[1]*j*j+1000010]++;
    56             }
    57         }
    58         for(int i=1;i<=100;i++){
    59             for(int j=1;j<=100;j++){
    60                 count+=mark[1000010-num[2]*i*i-num[3]*j*j];
    61             }
    62         }
    63         printf("%d\n",count*16);
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    MySQL 数据类型
    MySQL 存储引擎
    在Windows上安装MySQL
    windows 查看端口占用
    Linux 配置静态IP
    Nginx 核心配置
    Nginx 简介
    Linux下使用Nginx
    Tomcat 核心配置
    Tomcat 项目部署、账户配置、状态监测
  • 原文地址:https://www.cnblogs.com/wally/p/3051114.html
Copyright © 2011-2022 走看看