萌新87分求调
  • 板块P1120 小木棍
  • 楼主mojingyi1
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/9/3 20:54
  • 上次更新2024/9/4 10:29:35
查看原帖
萌新87分求调
1262305
mojingyi1楼主2024/9/3 20:54
#include<bits/stdc++.h>
using namespace std;
constexpr int N = 66;
int n, len = 1, sum = 0, a[N];
bool st[N], ans = 0;
char *p1,*p2,buf[100000];
#define nc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int read(){
    int x=0,f=1;
    char ch=nc();
    while(ch<48||ch>57){
        if(ch=='-')
            f=-1;
        ch=nc();
    }
    while(ch>=48&&ch<=57)
        x=x*10+ch-48,ch=nc();
   	return x*f;
}
void dfs(int l, int cnt, int val){
    if(val > len) return; 
    if(val == len) cnt++, val = 0, l = 1;
    if(cnt * len == sum){ ans = 1; return ;}
    if(ans) return ;
    for(int i = l + 1; i <= n; i++){
        if(st[i]) continue;
        st[i] = 1;
        dfs(i, cnt, val + a[i]);
        st[i] = 0;
        if(len - val == a[i] || val == 0) return ;
        while(a[i] == a[i+1]) i++;
    }
}
int main(){
    n = read();
    for(int i = 1; i <= n; i++){ 
        a[i] = read();
        //if(a[i] > 50) a[i] = 0;
        sum += a[i];
    }
    sort(a+1, a+n+1, greater<int>());
    while(len <= sum){
        if(sum % len == 0){
            dfs(0, 0, 0);
            if(ans != 0){cout << len; exit(0);}
        }
        len++;
    }
    return 0;
}
2024/9/3 20:54
加载中...