POJ1840 Eqs
题意描述
求一个五元方程 \(a_1x_1^3+a_2x_2^3+a_3x_3^3+a_4x_4^3+a_5x_5^3=0\) 的解的个数。
题中给出 \(a_i\) 的值并且保证 \(-50\leq a_i,x_i\leq 50,x_i\neq 0\)。(\(1\leq i\leq 5\))
算法分析
考虑暴力枚举,发现复杂度 \(100^5=10^{10}\),T 到飞起。
移项后变为:\(a_1x_1^3+a_2x_2^3+a_3x_3^3=-(a_4x_4^3+a_5x_5^3)\)。
可以考虑分两次枚举等式两边的值,通过 Hash 判断是否相等即可。
真·神仙思路。
代码实现
注意卡常啊,STL 的 vector/map 用不得。
这里不能判重哦,相等的也要加进去。(肯定是不同情况)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define N 100010
#define M 6000010
#define MOD 99991
using namespace std;
int a1,a2,a3,a4,a5,head[N],cnt=0;
struct Edge{
int nxt,to;
}ed[M];
int read(){
int x=0,f=1;char c=getchar();
while(c<'0' || c>'9') f=(c=='-')?-1:1,c=getchar();
while(c>='0' && c<='9') x=x*10+c-48,c=getchar();
return x*f;
}
void init(){
a1=read(),a2=read(),a3=read(),a4=read(),a5=read();
return;
}
int Abs(int x){
return x>0?x:-x;
}
void insert(int x){
int p=Abs(x)%MOD;
ed[++cnt].nxt=head[p];
ed[cnt].to=x;
head[p]=cnt;
return;
}
void pre_work(){
for(int i=-50;i<=50;i++)
for(int j=-50;j<=50;j++)
for(int k=-50;k<=50;k++){
if(i==0 || j==0 || k==0) continue;
int now=a1*i*i*i+a2*j*j*j+a3*k*k*k;
insert(now);
}
return;
}
int search(int now){
int p=Abs(now)%MOD,sum=0;
for(int i=head[p];i;i=ed[i].nxt)
if(now==ed[i].to) sum++;
return sum;
}
int main(){
init();
pre_work();
long long ans=0;
for(int i=-50;i<=50;i++)
for(int j=-50;j<=50;j++){
if(i==0 || j==0) continue;
int now=a4*i*i*i+a5*j*j*j;
ans+=search(-now);
}
printf("%d\n",ans);
return 0;
}
完结撒❀。
POJ1840 Eqs的更多相关文章
- POJ1840: Eqs(hash问题)
一道典型的hash问题: 已知a1,a2,a3,a4,a5,求有多少种不同的<x1,x2,x3,x4,x5>组合满足等式: a1*x1^3 + a2*x2^3 + a3*x3^3 + a4 ...
- poj1840 Eqs(hash+折半枚举)
Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The co ...
- POJ 1840 Eqs
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 15010 Accepted: 7366 Description ...
- Eqs
Eqs 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15029 题意: 给出系数a1,a2,a3,a4,a5,求出 ...
- POJ1840 hash
POJ1840 问题重述: 给定系数a1,a2, ..,a5,求满足a1 * x1 ^ 3 + a2 * x2 ^ 3 +... + a5 * x5 ^ 3 = 0的 xi 的组数.其中ai, xi都 ...
- 【POJ】1840:Eqs【哈希表】
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 18299 Accepted: 8933 Description ...
- 測试赛C - Eqs(哈希)
C - Eqs Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- poj1840
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 15133 Accepted: 7426 Description ...
- POJ-1840 Eqs---二分
题目链接: https://vjudge.net/problem/POJ-1840 题目大意: 给出一个5元3次方程,输入其5个系数,求它的解的个数 其中系数 ai∈[-50,50] 自变量xi∈[ ...
随机推荐
- MCU(Micro Control Unit)中文名称为微控制单元
参考:http://www.elecfans.com/dianzichangshi/mcu.html 什么是mcu_mcu是什么意思 标签:MCU(471)单片机(3098)微控制器(503) MCU ...
- 晶振(crystal)与谐振荡器(oscillator)
参考: 1. https://wenku.baidu.com/view/e609af62f5335a8102d2202f.html 2. 晶体振荡器也分为无源晶振和有源晶振两种类型.无源晶振与有源晶振 ...
- Java学习之动态代理篇
Java学习之动态代理篇 0x00 前言 在后面的漏洞研究的学习中,必须要会的几个知识点.反射机制和动态代理机制.至于反射的前面已经讲到过了,这里就不做更多的赘述了. 0x01 动态代理 这里先来讲一 ...
- 应用启动失败,报错:The server experienced an unexpected error when processing the request
前言 在腾讯云TKE集群中部署服务的时候,预警服务,warn一直重启,经过查询日志发现了如下的错误 The server experienced an unexpected error when pr ...
- 多层级makefile
多层级makefile 当项目变大之后,需要多层级的makefile来编译,每个makefile的具体功能实现参考单源文件目录makefile.然后再在顶层目录写一个总的makefile来实现编译逻辑 ...
- docket镜像
1.是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 1.1.什么是UnionF ...
- Ubuntu18.04中安装virtualenv和virtualenvwrapper
1.安装virtualenv和virtualenvwrapper pip3 install virtualenv pip3 install virtualenvwrapper 2.创建目录用来存放虚拟 ...
- 圆形进度条的模仿1-DrawArc,DrawCircle,DrawText讲解
1:画弧 canvas.drawArc(oval,startAngle,sweepAngle,useCenter,paint) 第一个参数:绘制的区域,oval可以是被定好了的一个区域,也可以将ova ...
- Linux基础命令列表
命令列表 A alias apt apt-get arp -n -s arping ab B bc basename bash -n -x bzip2 bunzip2 bzcat blkid brct ...
- Linux入门到放弃之五《用户管理》
用户管理 1.创建新用户user123,以此用户登陆系统,在tmp下创建文件test123: 2.修改test123文件的所有者为root,所属组也为root: 需要先切换为root用户 3.修改te ...