random_shuffle过了。。。
  • 板块P1120 小木棍
  • 楼主Joseph_H
  • 当前回复19
  • 已保存回复19
  • 发布时间2022/5/17 15:34
  • 上次更新2023/10/28 01:15:14
查看原帖
random_shuffle过了。。。
568775
Joseph_H楼主2022/5/17 15:34

交了十几遍,该用的优化都用了
然后摆烂,决定用随机排序让sort更快一点
然后就A了。。。。。

人麻了!!!

离谱至极,阳寿做题!

#include<bits/stdc++.h>
#define sort random_shuffle
using namespace std;
int n;
int f[70];
int sum;
int tt = 1;
bool used[70];
int cnt;
void sch(register int tgt,register int p,register int len,register int t){
	if(p == cnt){
		printf("%d",tgt);
		exit(0);
	}
	if(len > tgt) return;
	if(len == tgt){
		sch(tgt,p + 1,0,1);
	}
	if(tgt - len < f[n]) return;
	register int tag = 0;
	for(register int i = t;i <= n;i++){
		if(used[i] == 0 && len + f[i] <= tgt && f[i] != tag){
			used[i] = 1;
			sch(tgt,p,len + f[i],i + 1);
			tag = f[i];
			used[i] = 0;
			if(len == 0 || len + f[i] == tgt) return;
		}
	}
}
int main(){
	scanf("%d",&n);
//	n = read();
	for(register int i = 1;i <= n;i++){
		scanf("%d",&f[i]);
//		f[i]= read();
		sum += f[i];
	}
	sort(f + 1,f + n + 1);
	stable_sort(f + 1,f + n + 1,greater<int>());
	for(register int i = f[1];i <= sum / 2;i++){
		if(sum % i == 0){
			cnt = sum / i;
			memset(used,0,sizeof(used));
			sch(i,0,0,1);
		}
	}
	sch(sum,0,0,1);
}
2022/5/17 15:34
加载中...