poj 1186 方程的解数【折半dfs+hash】
折半搜索,map会T所以用hash表来存状态
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
const int N=10,mod=739391;
int n,m,k[N],p[N],w,a[155][N],h[1000005],cnt;
long long ans;
map<int,int>mp;
struct qwe
{
int ne,to,va;
}e[4000005];
void update(int x)
{//cerr<<x<<endl;
int u=(x%mod+mod)%mod,fl=0;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to==x)
{
e[i].va++;//cerr<<e[i].va<<endl;
fl=1;
break;
}
if(!fl)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].to=x;
e[cnt].va=1;
h[u]=cnt;
}
}
int ques(int x)
{//cerr<<x<<endl;
int u=(x%mod+mod)%mod;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to==x)
return e[i].va;
return 0;
}
int ksm(int a,int b)
{
int r=1;
while(b)
{
if(b&1)
r=r*a;
a=a*a;
b>>=1;
}
return r;
}
void dfs(int w,int v)
{
if(!w)
{
update(v);
return;
}
for(int i=1;i<=m;i++)
dfs(w-1,v+k[w]*a[i][w]);
}
void dfs2(int w,int v)
{
if(!w)
{
ans+=ques(-v);
return;
}
for(int i=1;i<=m;i++)
dfs2(w-1,v+k[n-w+1]*a[i][n-w+1]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d%d",&k[i],&p[i]);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
a[i][j]=ksm(i,p[j]);
int w=n/2;
dfs(w,0);
dfs2(n-w,0);
printf("%lld\n",ans);
return 0;
}
poj 1186 方程的解数【折半dfs+hash】的更多相关文章
- POJ 1186 方程的解数
方程的解数 Time Limit: 15000MS Memory Limit: 128000K Total Submissions: 6188 Accepted: 2127 Case Time ...
- 计蒜客 方程的解数(DFS)
问题描述 输出格式 输出一行,输出一个整数,表示方程的整数解的个数. 样例输入 - 样例输出 #include <stdio.h> #include <string.h> #i ...
- 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 的题目就是水 类似于这道题. 做过这道 ...
- CH 2401 - 送礼 - [折半DFS+二分]
题目链接:传送门 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了.某神牛有N个礼物,且异常沉重,但是GY的力气也异常的大(-_-b) ...
随机推荐
- 走入asp.net mvc不归路:[3]创建控制器
实际上,控制器就是一个类,一个继承自Controller的类.正常创建一个Controller即可,而问题在于asp.net mvc提供了一套便捷的方法,在创建一个Controller时,可以自动创建 ...
- C#语言基础语句
case,switch,break的使用 Console.WriteLine("1.汉堡"); Console.WriteLine("2.薯条"); Conso ...
- Intel的东进与ARM的西征(5)--智慧的大窗口,我们都在画里面
http://www.36kr.com/p/200168.html 繁华又算得了什么,不过是星尘的崩碎,那一抹青青的灰.公元 79 年,意大利维苏威火山喷发,已然兴盛了 600 年的庞贝古城被完全湮没 ...
- DOM编程 --《高性能JavaScript》
1.重绘和重排 浏览器下载完页面的所有组件 —— HTML标记,CSS,JavaScript,图片,会解析并生成两个内部数据结构. DOM树 表示页面结构 渲染树(CSS) 表示DOM节点如何显示 当 ...
- python实现斐波那契查找
通过在网上找教程解释和看书,总结出一套比较简单易懂的代码实现. 斐波那契查找和二分查找一样,针对的是有序序列,在此前提下: # 先创建一个Fibonacci函数 fib = lambda n: n i ...
- java的nio包的SelectionKey,Selector,SelectableChannel三者的缠绵关系概述
猛击这里 java的nio包的SelectionKey,Selector,SelectableChannel三者的缠绵关系概述
- 2016/07/05 zend optimizer
Zend Optimizer是由PHP核心引擎“Zend” http://www.zend.com 创建者Zend技术公司所开的免费PHP优化软件.据Zend公司透露使用这个软件某些情况下至少可以提高 ...
- Java程序员从笨鸟到菜鸟之(十五)Html基础积累总结(下)
本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 一:表格 1.表格的基本语法 <table>...</table> ...
- Axure Base 08 动态面板的用途
写了几个Axure教程之后发现,可能教程的起点有些高了,过分的去讲效果的实现,而忽略了axure功能以及基础元件的使用,那么从这个教程开始,把这些逐渐的展开讲解. 关于动态面板 动态面板是axure原 ...
- pyenv 安装本地版本
最近在用pyenv安装python的时候发现官网特别慢,经常出现拒绝访问的情况.看了一些解决方法,发现可以使用本地的python源码进行安装,让pyenv从本地下载就可以了~步骤如下: 首先从官网下载 ...