- map写的代码,开O2全WA,不开AC,为什么?
#include <bits/stdc++.h>
using namespace std;
const int maxn=15;
int n,m,k[maxn],p[maxn];
#define int long long
unordered_map<int,int> mp;
inline int qpow(int a,int b)
{
int res=1;
while(b)
{
if(b&1)res*=a;
a*=a;
b>>=1;
}
return res;
}
int ans=0;
void dfs1(int l,int r,int sum)
{
if(l>r)
{
mp[sum]++;
return;
}
for(int i=1;i<=m;i++)
{
dfs1(l+1,r,sum+k[l]*qpow(i,p[l]));
}
}
void dfs2(int l,int r,int sum)
{
if(l>r)
{
ans+=mp[-sum];
return;
}
for(int i=1;i<=m;i++)
{
dfs2(l+1,r,sum+k[l]*qpow(i,p[l]));
}
}
signed main()
{
scanf("%lld",&n);
scanf("%lld",&m);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld",&k[i],&p[i]);
}
int mid=(n+1)>>1;
dfs1(1,mid,0);
dfs2(mid+1,n,0);
printf("%lld\n",ans);
return 0;
}