POJ 1186 方程的解数
Time Limit: 15000MS | Memory Limit: 128000K | |
Total Submissions: 6188 | Accepted: 2127 | |
Case Time Limit: 5000MS |
Description

其中:x1, x2,...,xn是未知数,k1,k2,...,kn是系数,p1,p2,...pn是指数。且方程中的所有数均为整数。
假设未知数1 <= xi <= M, i=1,,,n,求这个方程的整数解的个数。
1 <= n <= 6;1 <= M <= 150。

方程的整数解的个数小于231。
★本题中,指数Pi(i=1,2,...,n)均为正整数。
Input
Output
Sample Input
3
150
1 2
-1 2
1 2
Sample Output
178
#include<stdio.h>
#include<stdlib.h>
#define Max 4000037
int hash[Max],num[Max];
//hash判断和的位置,num是和为s的个数 bool used[Max];
bool used[Max];
//判断hash是否用过
int n,M,k[],p[],cnt,mid;
int locat(int s)
{
int tmp=s;
while(tmp<)
{
tmp+=Max;
}
while(tmp>=Max)
{
tmp-=Max;
}
while(used[tmp]&&hash[tmp]!=s)
{
tmp++;
if(tmp>=Max)
{
tmp-=Max;
}
}
return tmp;
} void in_sert(int s)
{
int pos=locat(s);
hash[pos]=s;
used[pos]=;
num[pos]++;
}
void left_dfs(int d,int s) //左边一半的值的和的可能
{
if(d==mid)
{
in_sert(s);
return ;
}
for(int i=;i<=M;i++)
{
int tmp=k[d];
if(i!=&&tmp!=)
{
for(int j=;j<p[d];j++)
{
tmp*=i;
}
}
left_dfs(d+,s+tmp);
}
} void right_dfs(int d,int s) //右边所有和的可能如果左右相等,那么就加上这个和的所有可能
{
if(d==n)
{
s=-s;
int pos=locat(s);
if(hash[pos]==s)
{
cnt+=num[pos];
}
return ;
}
for(int i=;i<=M;i++)
{
int tmp=k[d];
if(i!=&&tmp!=)
{
for(int j=;j<p[d];j++)
{
tmp*=i;
}
}
right_dfs(d+,s+tmp);
}
}
int main()
{
int i,j;
scanf("%d",&n);
scanf("%d",&M);
for(i=;i<n;i++)
{
scanf("%d%d",&k[i],&p[i]);
}
mid=n/;
cnt=;
left_dfs(,);
right_dfs(mid,);
printf("%d\n",cnt);
return ;
}
POJ 1186 方程的解数的更多相关文章
- poj 1186 方程的解数【折半dfs+hash】
折半搜索,map会T所以用hash表来存状态 #include<iostream> #include<cstdio> #include<map> using nam ...
- Meet in the middle算法总结 (附模板及SPOJ ABCDEF、BZOJ4800、POJ 1186、BZOJ 2679 题解)
目录 Meet in the Middle 总结 1.算法模型 1.1 Meet in the Middle算法的适用范围 1.2Meet in the Middle的基本思想 1.3Meet in ...
- 计蒜客 方程的解数 dfs
题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...
- NOI2001 方程的解数
1735 方程的解数 http://codevs.cn/problem/1735/ 2001年NOI全国竞赛 时间限制: 5 s 空间限制: 64000 KB 题目描述 Descripti ...
- [ NOI 2001 ] 方程的解数
\(\\\) \(Description\) 已知一个 \(N\) 元高次方程: \[ k_1x_1^{p_1}+k_2x_2^{p_2}+...+k_nx_n^{p_n}=0 \] 要求所有的 \( ...
- cogs 304. [NOI2001] 方程的解数(meet in the middle)
304. [NOI2001] 方程的解数 ★★☆ 输入文件:equation1.in 输出文件:equation1.out 简单对比时间限制:3 s 内存限制:64 MB 问题描述 已 ...
- P5691 [NOI2001]方程的解数
题意描述 方程的解数 求方程 \(\sum_{i=1}^{n}k_ix_i^{p_i}=0(x_i\in [1,m])\) 的解的个数. 算法分析 远古 NOI 的题目就是水 类似于这道题. 做过这道 ...
- 【poj1186】 方程的解数
http://poj.org/problem?id=1186 (题目链接) 题意 已知一个n元高次方程: 其中:x1, x2,…,xn是未知数,k1,k2,…,kn是系数,p1,p2,…pn是指数 ...
- [Swust OJ 166]--方程的解数(hash法)
题目链接:http://acm.swust.edu.cn/problem/0166/ Time limit(ms): 5000 Memory limit(kb): 65535 有如下方程组: A1 ...
随机推荐
- Net中JSON序列化和反序列化处理(日期时间特殊处理)
0 缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...
- nginx.conf文件说明
#Nginx所有用户和组,window下不指定 #user nobody; #工作的子进程数量(通常等于CPU数量或者2倍于CPU) worker_processes 1; #错误日志存放路径 #er ...
- 老生常谈: Javascript 面向对象编程初探(一)--- 封装
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果 ...
- paip.Log4j配置不起作用的解决
paip.Log4j配置不起作用的解决 1.jar包里的log4j配置 看累挂jar,真的有个" webservices-rt.jar\com\sun\org\apache\xml\inte ...
- 《Effective STL中文版》前言
<Effective STL中文版>前言 我第一次写关于STL(Standard Template Library,标准模板库)的介绍是在1995 年,当时我在More Effec ...
- 菜鸟日记-HTML-表格与表单
一.表格 <table></table> width:宽度.可以用像素或百分比表示. border:边框,常用值0 cellpadding:内容跟单元格边框的边距.常用值0 a ...
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
本周作业的主要内容就是采用gcc嵌入汇编的方式调用system call. 系统调用其实就是操作系统提供的服务.我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变 ...
- Python面试题(二)
打印九九乘法表 思路:利用字符串的连接,梯形输出结果 >>> def st(num): ... l = [] ... for x in xrange(1, num + 1): ... ...
- JQuery快速入门
Write less, do more, I like jQuery. jQuery是最常用的js库,整体来说非常轻量并易于扩展,对于移动应用可以使用其更轻量的孪生兄弟Zepto代替.其是由John ...
- 教你如何删除WIN7系统文件以及无法删除的文件
http://jingyan.baidu.com/article/2f9b480d6d42ce41cb6cc2cc.html 我不怎么会说话,就简单明了的说吧!当我们想删除一个文件时提示无法删除,有些 ...