社区讨论

87pts,TLE#30,玄学卡不过

P1120[CERC 1995] 小木棍参与者 2已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mmcnhm9d
此快照首次捕获于
2026/03/05 07:11
3 天前
此快照最后确认于
2026/03/07 15:15
21 小时前
查看原帖
CPP
 #include<bits/stdc++.h>
using namespace std;
int n,ans=0,f=0,c,c1;
int a[75],fw[75];
bool cmp(int a,int b) {
    return a>b;
}
void dfs(int x,int y,int l) {
    if(f==1) return;  
    if(x==c) { 
        f=1;
        return;
    }
    if(y==c1) { 
        dfs(x+1,0,1);   
        return;
    }
    int is=-1;  
    for(int i=l;i<=n;i++) {
        if(fw[i]||y+a[i]>c1) continue;
        if(a[i]==is) continue;
        fw[i]=1;
        is=a[i];  
        bool isf=(y==0);       
        bool isl=(y+a[i]==c1);      
        dfs(x,y+a[i],i+1);    
        fw[i] = 0;  
        if(f==1) return;  
        if(isf==1) return;
        if(isl==1) return;
    }
}
int main() {
    ios_base::sync_with_stdio(false);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    int maxx=0,sum=0;
    for (int i=1;i<=n;i++) {
        cin>>a[i];
        maxx=max(maxx,a[i]);
        sum+=a[i];
    }
    sort(a+1,a+n+1,cmp);
    for (int i=maxx;i<=sum/2;i++) {
        if (sum%i!=0) continue;
        else {
            memset(fw,0,sizeof(fw));
            c=sum/i;
            c1=i;
            f=0;
            dfs(0,0,1);
            if (f==1) {
                cout<<i;
                return 0;
            }
        }
    }
    cout<<sum;
}
c++98-->284ms c++14(GCC9)-->294ms

回复

7 条回复,欢迎继续交流。

正在加载回复...