求 hack
  • 板块P1120 小木棍
  • 楼主卷王慢即快
  • 当前回复13
  • 已保存回复13
  • 发布时间2024/1/4 20:08
  • 上次更新2024/1/4 23:12:57
查看原帖
求 hack
494699
卷王慢即快楼主2024/1/4 20:08

洛谷上是过的,但是,在我们校内网站一样的题过不了(因为数据不一样,但是我看不见),所以来问一下。。

评测结果 6060 TLE+WA。

#include <bits/stdc++.h>
using namespace std;
#define int long long

inline int read() {
	int x = 0, f = 1; char ch = getchar();
	while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); }
	while(ch >= '0' && ch <= '9') { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); }
	return x * f;
}

int n,sum=0,ans=0,len=0;
int a[1007];
int cnt[1007];
int lst[1007];
bool flag=0;

inline void dfs(int remain,int num,int minlen){
	if(flag) return;
	if(remain==0){
		dfs(len,num-1,a[n]);
		return;
	}
	if(num==0){
		cout<<len<<"\n";
		flag=1;
		return;
	}
	minlen=min(minlen,remain);
	while(minlen>0&&!cnt[minlen]) minlen--;
	while(minlen>0){
		if(cnt[minlen]>0){
			cnt[minlen]--;
			dfs(remain-minlen,num,minlen);
			cnt[minlen]++;
			if(remain==len||minlen==remain) return;
		}
		minlen=lst[minlen];
	}
}

signed main(){
    n=read();
    for(int i=1;i<=n;i++){
        a[i]=read();
        sum+=a[i];
        cnt[a[i]]++;
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++) if(a[i]!=a[i-1]) lst[a[i]]=a[i-1];
    for(len=1;len<=sum/2&&!flag;len++)
        if(sum%len==0) dfs(len,sum/len,a[n]);
    if(flag==0) cout<<sum<<"\n";
	return 0;
}
2024/1/4 20:08
加载中...