#include<bits/stdc++.h>
#define long long int
using namespace std;
const int mod=50000007;
struct Edge{int nxt,data;}e[mod+2];
int head[mod],cnt;
int n,m,k[10],p[10],ans;
void Hash(int x)
{
int hash=abs(x)%mod;
e[++cnt].data=x;
e[cnt].nxt=head[hash];
head[hash]=cnt;
}
void dfs1(int step,int res)
{
if(step>(n>>1))
{
Hash(res);
return;
}
for(int i=1;i<=m;i++)
{
dfs1(step+1,res+k[step]*pow(i,p[step]));
}
}
int find(int x)
{
int hash=abs(x)%mod,ans1=0;
for(int i=head[hash];i;i=e[i].nxt)
{
if(e[i].data+x==0)ans1++;
}
return ans1;
}
void dfs2(int step,int res)
{
if(step>n)
{
ans+=find(res);
return;
}
for(int i=1;i<=m;i++)
{
dfs2(step+1,res+k[step]*pow(i,p[step]));
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&k[i],&p[i]);
}
dfs1(1,0);
dfs2((n>>1)+1,0);
cout<<ans;
return 0;
}
评测记录https://www.luogu.com.cn/record/120391588