http://poj.org/problem?id=1186 (题目链接)

题意

  已知一个n元高次方程:

   

  其中:x1, x2,…,xn是未知数,k1,k2,…,kn是系数,p1,p2,…pn是指数。且方程中的所有数均为整数。

  假设未知数1 <= xi <= M, i=1,,,n,求这个方程的整数解的个数。

Solution

  meet in the middle。移项,分两部分搜索,hash判断两次dfs的结果是否相同,统计结果。

代码

  1. // poj1186
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<cstdio>
  7. #include<cmath>
  8. #define MOD 10000007
  9. #define LL long long
  10. #define inf 2147483640
  11. #define Pi 3.1415926535898
  12. #define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
  13. using namespace std;
  14.  
  15. struct hash {int w,next,num;}h[100000010];
  16.  
  17. int cnt,ans,n,m,head[MOD],p[10],k[10],pd[1010][1010];
  18.  
  19. void dfs1(int x,int w) {
  20. if (x>n/2) {
  21. int i=abs(w)%MOD;
  22. bool flag=1;
  23. for (int j=head[i];j;j=h[j].next) if (w==h[j].w) {h[j].num++;flag=0;break;}
  24. if (flag) {h[++cnt].w=w;h[cnt].next=head[i];head[i]=cnt;h[cnt].num++;}
  25. }
  26. else
  27. for (int i=1;i<=m;i++) dfs1(x+1,w+k[x]*pd[i][p[x]]);
  28. }
  29. void dfs2(int x,int w) {
  30. if (x>n) {
  31. int i=abs(w)%MOD;
  32. for (int j=head[i];j;j=h[j].next) if (-w==h[j].w) {ans+=h[j].num;break;}
  33. }
  34. else
  35. for (int i=1;i<=m;i++) dfs2(x+1,w+k[x]*pd[i][p[x]]);
  36. }
  37. int main() {
  38. scanf("%d%d",&n,&m);
  39. for (int i=0;i<=m;i++) {
  40. pd[i][0]=1;
  41. for (int j=1;j<=m;j++) pd[i][j]=pd[i][j-1]*i;
  42. }
  43. for (int i=1;i<=n;i++) scanf("%d%d",&k[i],&p[i]);
  44. dfs1(1,0);
  45. dfs2(n/2+1,0);
  46. printf("%d",ans);
  47. return 0;
  48. }

  

【poj1186】 方程的解数的更多相关文章

  1. [折半搜索][哈希]POJ1186方程的解数

    题目传送门 这道题明显N数据范围非常小,但是M很大,所以用折半搜索实现搜索算法的指数级优化,将复杂度优化到O(M^(N/2)). 将搜出的两半结果用哈希的方式合并(乘法原理). Code: #incl ...

  2. POJ 1186 方程的解数

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

  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. [Swust OJ 166]--方程的解数(hash法)

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

  9. NOI2001 方程的解数(双向搜索)

    solution 一道非常经典的双向搜索题目,先将前3个未知数枚举一遍得到方程的前半部分所有可能的值,取负存入第一个队列中再将后3个未知数枚举一遍,存入第二个队列中.这样我们只要匹配两个队列中相同的元 ...

随机推荐

  1. TP框架中用tp模版迁移smarty模版的注意事项

    ThinkPHP使用Smarty模板引擎的流程及注意事项在多人合作的项目中,Smarty模板使用的最多,具体原因百度. 而ThinkPHP中默认使用的模板是Think自己的模板,这就需要修改默认的模板 ...

  2. 搜索引擎关键词劫持之asp篇

    摘要:关键词劫持(黑帽seo)其实原理很简单:搜索引擎关键词劫持的过程实际上就是,修改肉鸡站点(webshell站点)A的首页(希望被搜索引擎收录的页面,一般情况下是首页),使之做出判断... 黑帽S ...

  3. CentOS上搭建Nginx + Mono 运行 asp.net

    安装步骤: 一.获取开源相关程序: 1.利用CentOS Linux系统自带的yum命令安装.升级所需的程序库: sudo -sLANG=Cyum -y install gcc gcc-c++ aut ...

  4. DirectoryBrowserMiddleware中间件如何呈现目录结构

    DirectoryBrowserMiddleware中间件如何呈现目录结构 和StaticFileMiddleware中间件一样,DirectoryBrowserMiddleware中间本质上还是定义 ...

  5. c语言 指针与地址的区别

    指针由两部分组成,指针的类型和指针的值(也就是变量的地址). 指针和地址的区别: 地址只是一堆十六进制的字符,对应着内存条的某段内存, 而指针本身有地址,指针的值也是一个地址,指针本身还有类型,这与单 ...

  6. myeclipse中发送邮件出现Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

    出现这个问题的原因是jar包版本不统一,解决方法如下: 我在项目导入了jar包 与myeclipse自带jar冲突了 删除Java EE 5 Libraries/javaee.jar/mail里的包有 ...

  7. 由一次程序崩溃引起的对new表达式的再次学习

    1. 起因 某天,一个同事跟我反馈说在windows上调试公司产品的一个交易核心时出现了使用未初始化的指针导致后台服务崩溃的情况.示例代码如下所示: struct sample { ][]; //.. ...

  8. TP学习笔记一(tp的目录结构 , tp的输出方式)

    一.ThinkPHP的介绍 //了解 MVC M - Model 模型 工作:负责数据的操作 V - View 视图(模板) 工作:负责前台页面显示 C - Controller 控制器(模块) 工作 ...

  9. 十天冲刺---Day6

    站立式会议 站立式会议内容总结: 燃尽图 照片 一个队友回家有事,一个队友参加校运会比赛,只剩下两个人. 失去了UI是噩梦

  10. c语言中,既然不支持函数重载,那么printf算怎么回事?在c语言中,它不就是被重载了吗?

    这个问题问的不错.其实printf不是重载,c语言不支持函数重载 这句话是对的.printf函数是通过变长参数表实现的.你可以查看一下printf的函数原型声明.printf函数的实现在不同的机器上是 ...