题目传送门

这道题明显N数据范围非常小,但是M很大,所以用折半搜索实现搜索算法的指数级优化,将复杂度优化到O(M^(N/2))。

将搜出的两半结果用哈希的方式合并(乘法原理)。

Code:

#include <cstdio>
#include <algorithm>
#define Kss 10000000
using namespace std; int N,hf,kl[],kr[],pl[],pr[],M;
int Gl[Kss],Gr[Kss],Cl,Cr; int ksm(int x,int y){int Res=;while(y){if(y&)Res*=x;x*=x;y>>=;}return Res;} void searchl(int x,int tot){
if(x==hf+){Gl[++Cl]=tot;return ;}
for(int i=;i<=M;i++)searchl(x+,tot+kl[x]*ksm(i,pl[x]));
} void searchr(int x,int tot){
if(x==N-hf+){Gr[++Cr]=tot;return ;}
for(int i=;i<=M;i++)searchr(x+,tot+kr[x]*ksm(i,pr[x]));
} int Ans=;
int hs[Kss],Cts[Kss]; void hash(int x){int k=x>?x:-x;k%=Kss;while(hs[k]!=x&&hs[k]!=-2e9)k=k%Kss+;hs[k]=x,Cts[k]++;}
int find(int x){int k=x>?x:-x;k%=Kss;while(hs[k]!=x&&hs[k]!=-2e9)k=k%Kss+;return Cts[k];} int main()
{
scanf("%d%d",&N,&M);
for(int i=;i<Kss;i++)hs[i]=-2e9;
hf=N>>;
for(int i=;i<=hf;i++)scanf("%d%d",&kl[i],&pl[i]);
for(int i=;i<=N-hf;i++)scanf("%d%d",&kr[i],&pr[i]);
searchl(,),searchr(,);
for(int i=;i<=Cr;i++)Gr[i]=-Gr[i];
for(int i=;i<=Cl;i++)hash(Gl[i]);
for(int i=;i<=Cr;i++)Ans+=find(Gr[i]);
printf("%d",Ans);
return ;
}

[折半搜索][哈希]POJ1186方程的解数的更多相关文章

  1. 算法复习——哈希表+折半搜索(poj2549)

    搬讲义~搬讲义~ 折半搜索感觉每次都是打暴力时用的啊2333,主要是用于降次··当复杂度为指数级别时用折半可以减少大量复杂度··其实专门考折半的例题并不多···一般都是中途的一个小优化··· 然后折半 ...

  2. 【NOI2001】方程的解数 题解(dfs+哈希)

    题目描述 已知一个方程 k1*x1^p1+k2*x2^p2……+kn*xn^pn=0. 求解的个数.其中1<=x<=150,1<=p<=6; 答案在int范围内 输入格式 第一 ...

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

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

  4. [ NOI 2001 ] 方程的解数

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

  5. NOI2001 方程的解数

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

  6. bzoj1770: [Usaco2009 Nov]lights 燈(折半搜索)

    1770: [Usaco2009 Nov]lights 燈 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1153  Solved: 564[Submi ...

  7. 折半搜索+Hash表+状态压缩 | [Usaco2012 Open]Balanced Cow Subsets | BZOJ 2679 | Luogu SP11469

    题面:SP11469 SUBSET - Balanced Cow Subsets 题解: 对于任意一个数,它要么属于集合A,要么属于集合B,要么不选它.对应以上三种情况设置三个系数1.-1.0,于是将 ...

  8. POJ 1186 方程的解数

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

  9. 计蒜客 方程的解数 dfs

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

随机推荐

  1. 产品经理都知道MVP,但是它可能不再是产品研发最好的模型了

    产品经理都知道MVP,但是它可能不再是产品研发最好的模型了 孟小白Aspire • 2017-09-01 • 汽车交通 要简单.讨喜.完整,不要最小可行性产品.这对创业公司的第一个产品来说很重要. M ...

  2. 由delete导致的超时已过期问题

    1. 问题 开发人员反映应用程序中一条简单的delete语句执行报“超时已过期”错误.delete语句形式如下: delete * from table_1 where id=@value 2. 分析 ...

  3. ExpressRoute 合作伙伴和对等位置

    本文中的表格提供有关 ExpressRoute 连接提供商.ExpressRoute 地理覆盖范围.通过 ExpressRoute 支持的 Azure 服务以及 ExpressRoute 系统集成商 ...

  4. Oracle EBS 报错 您不具有分配给您的清除MDS的权限

  5. Jquery组织Form表单提交之Form submission canceled because the form is not connected

    有时候导出Excel时需要根据某些条件筛选数据,然后将数据通过NPOI生成Excel并导出.组织数据时可以通过放到一个表单中,某些场景是使用脚本(如:jquery)组织一个form(通过字符串拼接), ...

  6. UINavigationController与UITabBarController相关问题

    UINavigationController与UITabBarController相关问题 UINavigationController与UITabBarController混用是非常常见的,有时候会 ...

  7. Chrome新发现

    昨晚写代码的时候惊喜的发现Chrome中能直接使用一些ES6的语法: let, const, 箭头函数等已经能直接使用. 酷酷的. 另外我的Chrome版本还是比较旧的,并不需要最新版本.

  8. python subprocess 和 multiprocess选择以及我遇到的坑

    The subprocess option: subprocess is 用来执行其他的可执行程序的,即执行外部命令. 他是os.fork() 和 os.execve() 的封装. 他启动的进程不会把 ...

  9. mysql大数据量使用limit分页,随着页码的增大,查询效率越低下

    1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from product limit start, count当起始页较小时,查询没有性能问题 ...

  10. ab网站压力测试命令的参数、输出结果的中文注解

    ab命令原理 Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力. ab命令对发出负载的计算机要求很低,既不会占用很 ...