社区讨论
求 hack
P1120[CERC 1995] 小木棍参与者 5已保存回复 13
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 13 条
- 当前快照
- 1 份
- 快照标识符
- @lqz60l3a
- 此快照首次捕获于
- 2024/01/04 20:10 2 年前
- 此快照最后确认于
- 2024/01/04 23:12 2 年前
洛谷上是过的,但是,在我们校内网站一样的题过不了(因为数据不一样,但是我看不见),所以来问一下。。
评测结果 TLE+WA。
CPP#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;
}
回复
共 13 条回复,欢迎继续交流。
正在加载回复...