题意描述

方程的解数

求方程 \(\sum_{i=1}^{n}k_ix_i^{p_i}=0(x_i\in [1,m])\) 的解的个数。

算法分析

远古 NOI 的题目就是水

类似于这道题

做过这道题就没什么思维难度了,思路都是一样的,就是双向搜索。

但是这道题好像卡常比较严重,我是特判掉第一个点过的。(然后蜜汁洛谷 rank 1)

代码实现

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define N 10
#define MOD 1999991
#define M 6000010
using namespace std;
typedef long long ll; int n,m,k[N],p[N];
int cnt=0,head[M];
struct Edge{
int nxt;
ll to;
}ed[M<<1];
ll ans=0; int read(){
int x=0,f=1;char c=getchar();
while(c<'0' || c>'9') f=(c=='-')?-1:1,c=getchar();
while(c>='0' && c<='9') x=x*10+c-48,c=getchar();
return x*f;
} ll Abs(ll x){return x>0?x:-x;} int Hash(ll x){return Abs(x)%MOD;} ll Pow(int a,int b){
ll num=1;
while(b){
if(b&1) num*=a;
a*=a;
b>>=1;
}
return num;
} void insert(ll x){
int now=Hash(x);
ed[++cnt]=(Edge){head[now],x};
head[now]=cnt;
return;
} int search(ll x){
int u=Hash(x),tot=0;
for(int i=head[u];i;i=ed[i].nxt)
if(x==ed[i].to) ++tot;
return tot;
} void dfs1(int dep,ll sum){
if(dep>(n>>1)){
insert(sum);
return;
}
for(int i=1;i<=m;i++)
dfs1(dep+1,sum+k[dep]*Pow(i,p[dep]));
return;
} void dfs2(int dep,ll sum){
if(dep>n){
ans+=search(-sum);
return;
}
for(int i=1;i<=m;i++)
dfs2(dep+1,sum+k[dep]*Pow(i,p[dep]));
return;
} int main(){
n=read(),m=read();
for(int i=1;i<=n;i++)
k[i]=read(),p[i]=read();
dfs1(1,0);dfs2((n>>1)+1,0);
printf("%lld\n",ans);
return 0;
}

完结撒❀。

P5691 [NOI2001]方程的解数的更多相关文章

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

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

  2. NOI2001 方程的解数

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

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

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

  4. POJ 1186 方程的解数

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

  5. 计蒜客 方程的解数 dfs

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

  6. [ NOI 2001 ] 方程的解数

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

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

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

  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. (数据科学学习手札96)在geopandas中叠加在线地图

    本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 国庆期间,抽空给大家分享在geopandas中叠 ...

  2. VS调试时查看动态数组的全部元素

    转载:https://blog.csdn.net/sinat_36219858/article/details/80720527

  3. 《流畅的Python》 第一部分 序章 【数据模型】

    流畅的Python 致Marta,用我全心全意的爱 第一部分 序幕 第一章 Python数据模型 特殊方法 定义: Python解释器碰到特殊句法时,使用特殊方法激活对象的基本操作,例如python语 ...

  4. shell-脚本的执行

    1. shell脚本的执行 当shell脚本以非交互的方式运行时,它会先查找环境变量ENV,该变量指定了一个环境文件(通常是.bashrc),然后从该环境变量文件开始执行,当读取了ENV文件后,she ...

  5. DX12龙书 02 - DirectXMath 库中与向量有关的类和函数

    0x00 需要用到的头文件 #include <DirectXMath> #include <DirectXPackedVector.h> using namespace Di ...

  6. mysql5.7.23 解压版 密码忘记了咋办??

    mysql 5.7.23  err文件: 查看log中保存的 密码 记下密码,重新启动MySQL服务,并进入CMD命令行,在此使用mysql -u root -p登陆,键入密码 进入数据库后,使用se ...

  7. JVM(五):JVM模型与GC

    确定垃圾 引用计数(存在循环引用问题) 根可达算法 常见的垃圾回收算法 标记清除算法-位置不连续,产生碎片 拷贝算法- 没有碎片,浪费空间 标记压缩-没有碎片,效率偏低(多线程需要进行线程同步,单线程 ...

  8. MeteoInfoLab脚本示例:subplot

    subplot命令可以自动等间距分配多个坐标系(Axes),命令中有三个参数,前两个定义了行数和列数,第三个指定了当前的坐标系(Axes),绘图命令是作用在当前坐标系中的. 脚本程序: def f(t ...

  9. 1、微信小程序开发介绍。

    微信小程序如何能达到快速的开发效果,下面首先介绍一下需要的框架,使用这些框架可以减少大部分编写代码时间. 微信小程序使用的框架:weui开源框架 后端数据使用的框架(包含管理和api接口框架):YiS ...

  10. Springboot配置excludePathPatterns不生效

    Springboot添加拦截器配置excludePathPatterns不生效 code: @Configurationpublic class ServiceConfig implements We ...