304. [NOI2001] 方程的解数

★★☆   输入文件:equation1.in   输出文件:equation1.out   简单对比
时间限制:3 s   内存限制:64 MB

问题描述

已知一个n元高次方程:

k1xp11+k2xp22+⋯+ knxpnn=0

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

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

输入文件

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

输出文件

文件仅一行,包含一个整数,表示方程的整数解的个数。

输入样例

3
150
1 2
-1 2
1 2

输出样例

178

约束条件

1<=n<=6;1<=M<=150;

|k1Mp1|+|k2Mp2|+⋯+|knMpn|<231

方程的整数解的个数小于2^31。

★本题中,指数Pi(i=1,2,……,n)均为正整数。
思路:meet in the middle。

计算满足 a+b+c+d+e+f=0  的数的个数

可以算 (a+b+c)+ (d+e+f) = 0

dfs两次,每次dfs一半

结果用双指针逼近法、乘法原理 O(n) 处理

dfs中 now代表计算到第几个数 ,tot代表当前的总和,tmp存储和是几,sum存储有几个和。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 3442951
using namespace std;
int n,m,half,last,sum1,sum2,ans;
int k[],p[],tmp1[MAXN],tmp2[MAXN];
int fastpow(int a,int b){
int s=;
while(b){
if(b&) s=s*a;
a=a*a;
b>>=;
}
return s;
}
void dfs(int now,int tot,int *tmp,int &sum){
if(now>last){
tmp[++sum]=tot;
return ;
}
for(int i=;i<=m;i++)
dfs(now+,tot+k[now]*fastpow(i,p[now]),tmp,sum);
}
void work(){
int cnt1,cnt2,j=sum2;
sort(tmp1+,tmp1++sum1);
sort(tmp2+,tmp2++sum2);
for(int i=;i<=sum1;i++){
while(j&&tmp1[i]+tmp2[j]>) j--;
if(!j) break;
if(tmp1[i]+tmp2[j]==){
cnt1=cnt2=;
while(i<sum1&&tmp1[i]==tmp1[i+]) cnt1++,i++;
while(j>&&tmp2[j]==tmp2[j-]) cnt2++,j--;
ans+=cnt1*cnt2;
}
}
}
int main(){
freopen("equation1.in","r",stdin);
freopen("equation1.out","w",stdout);
scanf("%d%d",&n,&m);
half=n/;
for(int i=;i<=n;i++)
scanf("%d%d",&k[i],&p[i]);
last=half;
dfs(,,tmp1,sum1);
last=n;
dfs(half+,,tmp2,sum2);
work();
cout<<ans;
}

cogs 304. [NOI2001] 方程的解数(meet in the middle)的更多相关文章

  1. codevs1735 方程的解数(meet in the middle)

    题意 题目链接 Sol 把前一半放在左边,后一半放在右边 meet in the middle一波 统计答案的时候开始想的是hash,然而MLE了两个点 实际上只要排序之后双指针扫一遍就行了 #inc ...

  2. NOI2001 方程的解数

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

  3. P5691 [NOI2001]方程的解数

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

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

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

  5. Meet in the middle学习笔记

    Meet in the middle(MITM) Tags:搜索 作业部落 评论地址 PPT中会讲的很详细 当搜索的各项互不影响(如共\(n\)个物品前\(n/2\)个物品选不选和后\(n/2\)个物 ...

  6. 【poj1186】 方程的解数

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

  7. POJ 1186 方程的解数

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

  8. 计蒜客 方程的解数 dfs

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

  9. [ NOI 2001 ] 方程的解数

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

随机推荐

  1. sql中自连接的使用

    一.用SQL自连接查询处理列之间的关系 SQL自身连接,可以解决很多问题.下面举的一个例子,就是使用了SQL自身连接,它解决了列与列之间的逻辑关系问题,准确的讲是列与列之间的层次关系.SQL代码如下: ...

  2. C++表达式求值(利用数据结构栈)

    唉,刚刚用C++又又一次写了一个较完好的表达式求值程序,最后精简后程序还不到100行.这不经让我 想到了大一上学期刚学c语言时自己费了好大的劲,写了几百行并且功能还不是非常齐全(当时还不能计算有括号的 ...

  3. 【CareerCup】Trees and Graphs—Q4.3

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/24744177     题目: Given a sorted (increasing ord ...

  4. spark transform系列__sortByKey

    该函数主要功能:通过指定的排序规则与进行排序操作的分区个数,对当前的RDD中的数据集按KEY进行排序,并生成一个SHUFFLEdrdd的实例,这个过程会运行shuffle操作,在运行排序操作前,sor ...

  5. Android App 内存泄露之Thread

    Thread 内存泄露 线程也是造成内存泄露的一个重要的源头.线程产生内存泄露的主要原因在于线程生命周期的不可控. 1.看一下以下是否存在问题 <span style="white-s ...

  6. Android recovery UI实现分析

    Android recovery模式为何物? 关于这个问题, baidu上已经有无数的答案.不理解的朋友先补习一下. 从纯技术角度来讲, recovery和android本质上是两个独立的rootfs ...

  7. SQL从头開始

    SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL) 查询和更新指令构成了 SQL 的 DML 部分: SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中 ...

  8. NSAttributedString编程

    - (void)viewDidLoad {     [super viewDidLoad];          NSMutableAttributedString *attributedString ...

  9. caffe-ssd使用预训练模型做目标检测

    首先参考https://www.jianshu.com/p/4eaedaeafcb4 这是一个傻瓜似的目标检测样例,目前还不清楚图片怎么转换,怎么验证,后续继续跟进 模型测试(1)图片数据集上测试 p ...

  10. 最好的PHP框架有哪些

    最好的PHP框架有哪些 首推 Laravel ,其次是 Yii,Laravel 的设计思想以及在工程实践上的支持,超过 ThinkPHP 好几个世代.如果说原生的 PHP 是火枪, ThinkPHP ...