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

Description

已知一个n元高次方程: 
 
其中: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

第1行包含一个整数n。第2行包含一个整数M。第3行到第n+2行,每行包含两个整数,分别表示ki和pi。两个整数之间用一个空格隔开。第3行的数据对应i=1,第n+2行的数据对应i=n。

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 方程的解数的更多相关文章

  1. poj 1186 方程的解数【折半dfs+hash】

    折半搜索,map会T所以用hash表来存状态 #include<iostream> #include<cstdio> #include<map> using nam ...

  2. 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 ...

  3. 计蒜客 方程的解数 dfs

    题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...

  4. NOI2001 方程的解数

    1735 方程的解数 http://codevs.cn/problem/1735/ 2001年NOI全国竞赛  时间限制: 5 s  空间限制: 64000 KB     题目描述 Descripti ...

  5. [ NOI 2001 ] 方程的解数

    \(\\\) \(Description\) 已知一个 \(N\) 元高次方程: \[ k_1x_1^{p_1}+k_2x_2^{p_2}+...+k_nx_n^{p_n}=0 \] 要求所有的 \( ...

  6. cogs 304. [NOI2001] 方程的解数(meet in the middle)

    304. [NOI2001] 方程的解数 ★★☆   输入文件:equation1.in   输出文件:equation1.out   简单对比时间限制:3 s   内存限制:64 MB 问题描述 已 ...

  7. P5691 [NOI2001]方程的解数

    题意描述 方程的解数 求方程 \(\sum_{i=1}^{n}k_ix_i^{p_i}=0(x_i\in [1,m])\) 的解的个数. 算法分析 远古 NOI 的题目就是水 类似于这道题. 做过这道 ...

  8. 【poj1186】 方程的解数

    http://poj.org/problem?id=1186 (题目链接) 题意 已知一个n元高次方程:   其中:x1, x2,…,xn是未知数,k1,k2,…,kn是系数,p1,p2,…pn是指数 ...

  9. [Swust OJ 166]--方程的解数(hash法)

    题目链接:http://acm.swust.edu.cn/problem/0166/ Time limit(ms): 5000 Memory limit(kb): 65535   有如下方程组: A1 ...

随机推荐

  1. xml Schema import

    first_.xsd <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs=& ...

  2. CentOS Minimal版最小化安装后VMware联网详解

    最近想搞个mailman邮件列表,又不想在我常用的CentOS 6.4上做实验,怕破坏了环境,于是就想装个试验机,又嫌它占空间太大,于是找了半天发现CentOS 6.0的minimal版本最适合了,装 ...

  3. SQL order by的用法

    首先,order by是用来写在where之后,给多个字段来排序的一个DQL查询语句. 其次,order by写法: 1.  select 字段列表/* from 表名 where 条件 order ...

  4. 【Android】Android开源项目分类汇总

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

  5. Atitit.人力资源管理原理与概论

    Atitit.人力资源管理原理与概论 1. 人力资源管理 第一章 人力资源管理概述 第二章 人力资源理论基础与发展演变 第三章 人力资源规划 第四章工作分析与工作设计 第五章 员工招聘与录用 第六章 ...

  6. Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/ma ven/cli/Maven/java与javac版本不一致问题

    编译的时候 中出现如下异常: Exception in thread "main" Java.lang.UnsupportedClassVersionError: org/apac ...

  7. 前端框架layui

    可以了解下jQuery组件layer layui开始使用Layui兼容除IE6/7以外的全部浏览器,并且绝大多数结构支持响应式 弹出层如果你使用的是Layui,那么你直接在官网下载layui框架即可, ...

  8. 编写西游记人物类(XiYouJiRenWu)

    package java1; public class XiYouJiRenWu { double height; String name; String weapon; void printName ...

  9. unsigned long类型转换为CString出现的问题

    开发工具:VC2010 财务程序读卡时发现有的卡片读出的卡号异常,代码如下: // 读卡序列号 unsigned long cardNo; CICReader reader(ICREADER_TYPE ...

  10. 在Unicode版Inno Setup中使用ISSkin

    ISSkin是Code jock 公司出品的Inno Setup 皮肤插件,用于为Inno制作的安装程序提供皮肤功能. 自Delphi发布2009之后,Inno Setup 开始出现支持Unicode ...