题目链接

描述

有以下等式:a1x13+a2x23+a3x33+a4x43+a5*x53=0

x1,x2,x3,x4,x5都就在区间[-50,50]之间的整数,且x1,x2,x3,x4,x5都不等于0.

问:给定a1,a2,a3,a4,a5的情况下,x1,x2,x3,x4,x5共有多少种可能的取值?

  • 输入

    第一行输入一个整数T(T<=10)表示测试数据的组数。每组测试数据都只有一行,是5个整数,分表表示a1,a2,a3,a4,a5。(a1,a2,a3,a4,a5都在区间[-50,50]之间)
  • 输出

    对于每组数据输出一行,表示x1,x2,x3,x4,x5可能的取值种数
  • 样例输入

    1

    37 29 41 43 47
  • 样例输出

    654

分析:

刚开始以为是母函数,然后发现思路上不同,暴力的话不用考虑肯定会超时。然后就想到用哈希来解决这个问题。我们可以先把前两项或者前三项放入到哈希表中,然后在哈希表中找后三项或者后两项。以放前两项为例。

代码:

#include<stdio.h>
#include<iostream>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<algorithm>
#include<set>
#include<map>
#include <cstdio>
#define mod 10007
using namespace std;
int a1,a2,a3,a4,a5;
struct Node
{
int key;//关键字
long long int cnt;//个数
int next;//下一个值得下标
} node[100005];//结构体 int Hash1[10007];//哈希函数
int Sum; int QuYu(unsigned int num)
{
return num%mod;
} void Insert(int num)
{
int index=QuYu(num);
for(int i=Hash1[index]; i!=-1; i=node[i].next)///首先是在哈希函数中找到这个链表的头节点,然后往下找,看看有没有与num相同的值
if(node[i].key==num)///如果有的话
{
node[i].cnt++;///个数加
return ;
} ///哈希函数中,采用链表法来解决哈希冲突,而对于有冲突的数据,应用头插法插入到链表中
node[Sum].key=num;///相当于这个数字是第一次出现
node[Sum].cnt=1;
node[Sum].next=Hash1[index];
Hash1[index]=Sum;
Sum++;
}
long long int Find(int num)
{
int index=QuYu(num);
for(int i=Hash1[index]; i!=-1; i=node[i].next)///首先是在哈希函数中找到这个链表的头节点,然后往下找,看看有没有与num相同的值
{
if(node[i].key==num)///有的话就返回数量
return node[i].cnt;
}
return 0;///没找到就以为着哈希表中没有这个数,返回个数为0
} void build()///首先构造哈希函数
{
Sum=0;
for(int i=0; i<mod; i++)
Hash1[i]=-1;
for(int i=-50; i<=50; i++)
for(int j=-50; j<=50; j++)
{
if(i&&j)
Insert(a1*i*i*i+a2*j*j*j);///把对应的前两项的值放入
}
} void solve()
{
long long int ans=0;
for(int i=-50; i<=50; i++)
for(int j=-50; j<=50; j++)
for(int k=-50; k<=50; k++)
{
if(i&&j&&k)
ans+=Find(-a3*i*i*i-a4*j*j*j-a5*k*k*k);
}
printf("%lld\n",ans);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5);
build();
solve();
}
return 0;
}

NYOJ 136 等式 (哈希)的更多相关文章

  1. 简答哈希实现 (nyoj 138 找球号2)

    例题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=138 代码目的:复习哈希用 代码实现: #include "stdio.h&qu ...

  2. nyoj 138 找球号(二)(哈希)

    题目:nyoj——138 /*** 哈希求解...采用链表保存 插入时,可以去除重复 查找 找到该组,然后在改组的查找 当这个组不存在时或是没有找到时是 NO 其他是YES 1e6+1 时间最短 */ ...

  3. NYOJ 2356 哈希计划(模拟)

    题目链接: http://acm.nyist.me/JudgeOnline/problem.php?id=2356 题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩&l ...

  4. NYOJ 138 找球号(二) (哈希)

    题目链接 描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是&qu ...

  5. nyoj 528 找球号(三)(哈希)

    点解:题目链接 两种办法,1是使用容器set做 2必须知道这个结论,  突然感觉数论很强大啊,,,, /*//set容器处理 出一次加进去,再出现删掉,这个最后留下的就是那个只出现基数次的 #incl ...

  6. nyoj 130 同样的雪花 【哈希】

    同样的雪花 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 You may have heard that no two snowflakes are alike. ...

  7. C# 哈希表的实现

    8.4.2 Hashtable的代码实现   哈希表的实现较为复杂,为了简化代码,本例忽略了部分出错判断,在测试时请不要设key值为空.   1 using System; 2 public clas ...

  8. Eqs (哈希)

    Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 10695   Accepted: 5185 Description Cons ...

  9. Java数据结构和算法 - 哈希表

    Q: 如何快速地存取员工的信息? A: 假设现在要写一个程序,存取一个公司的员工记录,这个小公司大约有1000个员工,每个员工记录需要1024个字节的存储空间,因此整个数据库的大小约为1MB.一般的计 ...

随机推荐

  1. Charles安装及使用教程

    一. 简介及安装 一.charles的使用 1.1  charles的说明 Charles其实是一款代理服务器,通过过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后截取请求和请求结果达到 ...

  2. EasyUI使用DataGrid向服务器传参

    由于DataGrid自带有Post方式,使用Url可以向指定的地址Post数据,所以从这方面来看和Jquery的Ajax非常像(我想应该就是使用的Ajax,不过没有深入研究过Easyui的源代码).但 ...

  3. Bootstrap-tagsinput标系统使用心得

    最近工作中由于需求使用到了Bootstrap-tagsinput标系统,我的需求是: 1)能够从后台数据库获取标签信息展示到前端页面: 2)能够实现输入标签添加到后台,并ajax刷新页面: 3)能够实 ...

  4. asp.net core 登录身份认证(Cookie)

    asp.net core 2最简单的登录功能 源代码在此 创建asp.net core Web Mvc项目 配置下选项 项目目录结构 在Models文件夹下新建两个实体类 public class T ...

  5. 【明哥报错簿】之【inside the host appBase has been specified, and will be ignored】和【did not find a matching property.】

    tomcat启动时有时候会报一些警告,项目有时候也是可以正常运行.但是警告出现还是要找到原因消灭掉,两个典型的警告解决办法如下: 1.[inside the host appBase has been ...

  6. BZOJ3714 PA2014Kuglarz(最小生成树)

    每次询问所获得的可以看做是两个前缀和的异或.我们只要知道任意前缀和的异或就可以得到答案了.并且显然地,如果知道了a和b的异或及a和c的异或,也就知道了b和c的异或.所以一次询问可以看做是在两点间连边, ...

  7. 【MVVM 原生】原生MVVM的使用

    一.前言       前些天需要完成一个任务,该任务属于公司的一些核心代码,为了避免不必要的麻烦,任务要求不能使用第三方的MVVM框架,必须用原生的. 平时习惯了Dev与MVVMLight,遇上原生的 ...

  8. KinFu --- KinectFusion的开源实现

    KinectFusion是微软研究院的一个项目,研究用Kinect来实时地重构3D表面,最终用于人机交互. 先看视频:http://research.microsoft.com/en-us/proje ...

  9. NAT网络地址转换模拟过程

    原理图,如图1 图1 以下为配置NAT网络地址转换的实验: eNSP模拟图,如图2 图2 Step1.给路由器的每个接口赋予一个地址,如图3,图4 图3 图4 AR1和AR2中添加路由表项,如图5,图 ...

  10. [HEOI2015]公约数数列

    不错的分块题 gcd和xor其实并没有联系 这里,xor的按位性质没有半点卵用 gcd的性质却很关键: 一个数组,前缀gcd最多logn个不同的 gcd不太多,(暴力的基础) 所有考虑分块. 分块,每 ...