社区讨论
TLE最后一个点求条
P1120[CERC 1995] 小木棍参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mjtwns5v
- 此快照首次捕获于
- 2025/12/31 19:00 2 个月前
- 此快照最后确认于
- 2026/01/03 09:35 2 个月前
CPP
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int MAXN=65+5;
int l,r,mid,n,ans,sum,len;
int a[MAXN];
bool vis[101];
inline bool dfs(int ii,int now,int rr){
if(!rr) return true;
if(now==len) return dfs(1,0,rr-1);
if(now<len){
int i=ii;
while(i<=n&&(vis[i]||now+a[i]>len)) i++;
if(i>n) return false;
}
int fail=0;
for(int i=ii;i<=n;i++){
if(!vis[i]&&now+a[i]<=len&&a[i]!=fail){
vis[i]=true;
if(dfs(i+1,now+a[i],rr)) return true;
vis[i]=false;
fail=a[i];
if(!now) break;
if(now+a[i]==len) break;
if(len-now==a[i]) break;
}
}
return false;
}
inline bool check(int x){
if(sum%x)return false;
len=x;
memset(vis,0,sizeof vis);
return dfs(1,0,sum/x);
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
sort(a+1,a+n+1,greater<int>());
l=a[1];
for(len=l;len<=sum;len++){
if(sum%len==0&&check(len)){
cout<<len;
return 0;
}
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...