求hack
查看原帖
求hack
748437
AirQwQ楼主2024/8/12 17:02
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=2e5+5,mod=998244353,inf=9e18;
#define pii pair<int,int>
#define fi first
#define se second
pii a[maxn],b[25];
map<pii,int> mp;
int k,cnt,f[25],p;
unsigned int ans=1;
void dfs(int s,unsigned int sum){
	if(s>k){
		ans=max(ans,sum);
		return;
	}
	for(int i=1;i<=cnt;i++){
		if(f[i]) continue;
		f[i]=1;
		dfs(s+1,sum*b[i].fi+b[i].se);
		f[i]=0;
	}
}
signed main(){
	cin.tie(0);
	int n;cin>>n>>k;
	for(int i=1;i<=n;i++)
		cin>>a[i].fi>>a[i].se,mp[a[i]]++;
	sort(a+1,a+n+1,[](pii x,pii y){
		if(x.fi!=y.fi)return x.fi>y.fi;
		return x.fi+x.se>y.fi+y.se;
	});
	for(int i=1;i<=n&&cnt<k;i++)
		if(mp[a[i]]) b[++cnt]=a[i],mp[a[i]]--;
	sort(a+1,a+n+1,[](pii x,pii y){
		if(x.fi+x.se!=y.fi+y.se)return x.fi+x.se>y.fi+y.se;
		return x.fi>y.fi;
	});
	for(int i=1;i<=n&&cnt<=k;i++)
		if(mp[a[i]]) b[++cnt]=a[i],mp[a[i]]--;
	dfs(1,1);
	cout<<ans;
	return 0;
}

思路就是找 a+ba+b 最大的 1010 个数和除此之外 aa 最大的 11 个数全排列枚举,看起来就很假,我也觉得它就是假的,但它能过 QwQ

2024/8/12 17:02
加载中...