zoukankan      html  css  js  c++  java
  • hdu 1496

    题目分类里说这题是hash,我用深搜加剪枝水过~~不过这道题还真算得上一道好题,思路很多,可以用HASH,题目数据再加强一点就更好了

    深搜代码如下:

    /*
    * hdu1496/linux.c
    * Created on: 2011-8-5
    * Author : ben
    */
    #include
    <stdio.h>
    #include
    <stdlib.h>
    #include
    <string.h>
    #include
    <math.h>

    void work();
    int main() {
    #ifndef ONLINE_JUDGE
    freopen(
    "data.in", "r", stdin);
    #endif
    work();
    return 0;
    }

    int a[4], ans, x[4];

    void dfs(int step) {
    int i, temp;
    x[step]
    = 0;
    while (x[step] < 100) {
    x[step]
    ++;
    if (step < 2) {
    dfs(step
    + 1);
    }
    else {
    temp
    = 0;
    for (i = 0; i < 3; i++) {
    temp
    += a[i] * x[i] * x[i];
    }
    if (temp <= 0 || temp + a[3] * 10000 > 0) {
    continue;
    }
    x[
    3] = sqrt(temp / (-a[3]));
    if (x[3] <= 100 && x[3] * x[3] * a[3] + temp == 0) {
    ans
    ++;
    }
    }
    }
    }

    void work() {
    int i, j;
    while (scanf("%d%d%d%d", &a[0], &a[1], &a[2], &a[3]) == 4) {
    for (i = 0; i < 4; i++) {
    for (j = i + 1; j < 4; j++) {
    if (a[i] < a[j]) {
    a[i]
    = a[i] ^ a[j];
    a[j]
    = a[i] ^ a[j];
    a[i]
    = a[i] ^ a[j];
    }
    }
    }
    if (a[3] > 0 || a[0] < 0) {
    puts(
    "0");
    continue;
    }
    ans
    = 0;
    dfs(
    0);
    printf(
    "%d\n", ans * 16);
    }
    }

    HASH方法代码:

    /*
    * hdu1496/linux.c
    * Created on: 2011-8-5
    * Author : ben
    */
    #include
    <stdio.h>
    #include
    <stdlib.h>
    #include
    <string.h>
    #include
    <math.h>
    void work();
    int main() {
    #ifndef ONLINE_JUDGE
    freopen(
    "data.in", "r", stdin);
    #endif
    work();
    return 0;
    }

    int hash[2000010];
    void work() {
    int a, b, c, d, i, j, count;
    while (scanf("%d %d %d %d", &a, &b, &c, &d) != EOF) {
    if ((a > 0 && b > 0 && c > 0 && d > 0)
    || (a < 0 && b < 0 && c < 0 && d < 0)) {
    puts(
    "0");
    continue;
    }
    memset(hash,
    0, sizeof(hash));
    count
    = 0;
    for (i = 1; i <= 100; i++) {
    for (j = 1; j <= 100; j++) {
    hash[a
    * i * i + b * j * j + 1000000]++;
    }
    }
    for (i = 1; i <= 100; i++) {
    for (j = 1; j <= 100; j++) {
    count
    += hash[1000000 - c * i * i - d * j * j];
    }
    }
    printf(
    "%d\n", 16 * count);
    }
    }
  • 相关阅读:
    动态规划设计:最长递增子序列
    经典动态规划:编辑距离
    经典动态规划:子集背包问题
    iOS开发网络篇—HTTP协议
    IOS之Core Foundation框架和Cocoa Foundation框架的区别
    iOS开发多线程篇—GCD简介
    iOS-UIImage变为NSData并进行压缩
    iOS开发UI之Quartz2D使用(绘制基本图形)
    UIImagePickerController
    mac下搭建discuz论坛
  • 原文地址:https://www.cnblogs.com/moonbay/p/2128719.html
Copyright © 2011-2022 走看看