数据过水
查看原帖
数据过水
122757
PrefixAMS楼主2021/8/11 20:01

RT

样例没过 A了

建议把样例加进去。。。。

#include<bits/stdc++.h>
using namespace std;
int n,m;
const int maxn = 8;
int k[maxn],p[maxn];
int cnt;
const int maxm = 4e6 + 10;
int a[maxm];
//map < int , int > b;
int b[maxm];
int cnt1,cnt2;
void dfs1(int x , int sum) {
	if(x > n / 2) {
		a[++ cnt1] = sum;
		return ;
	}
	for(int i = 1 ; i <= m ; i ++) dfs1(x + 1 , sum + k[x] * pow(i , p[x]));
}
void dfs2(int x , int sum) {
	if(x > n) {
		b[++ cnt2] = sum;
		return ;
	}
	for(int i = 1 ; i <= m ; i ++) dfs2(x + 1 , sum + k[x] * pow(i , p[x]));
}
int ans;
int main() {
	cin >> n >> m;
	for(int i = 1 ; i <= n ; i ++) cin >> k[i] >> p[i];
	dfs1(1 , 0);
	dfs2(n / 2 + 1 , 0);
	sort(b + 1 , b + cnt2 + 1);
//	cout << cnt1 << " " << cnt2 << endl;
//	cout << "wdnmd";
	
	for(int i = 1 ; i <= cnt1 ; i ++) {
		ans += (upper_bound(b + 1 , b + cnt2 + 1 , - a[i]) - lower_bound(b + 1 , b + cnt2 + 1 , - a[i]));
	}
	cout << ans;
}
2021/8/11 20:01
加载中...