1 solutions
-
0
C :
# include <stdio.h> int main() { int n,a[50],i; while(scanf("%d",&n)!=EOF) { if(n==0) break; int sum=0; for(i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } int t=a[0]; for(i=1;i<n;i++) if(t<a[i]) t=a[i]; for(i=t;;i++) { if(sum%i==0) break; } printf("%d\n",i); } return 0; }C++ :
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=70; int n,len,num; int sticks[N],vis[N]; int flag; int cmp(int a,int b){ return a>b; } void DFS(int k,int cur,int cnt){ if(flag) return; if(cnt==num){ flag=1; return ; } if(cur==len) DFS(0,0,cnt+1); else{ int pre=-1; for(int i=k;i<n;i++) if(!vis[i] && sticks[i]+cur<=len && sticks[i]!=pre){ pre=sticks[i]; vis[i]=1; DFS(i+1,sticks[i]+cur,cnt); vis[i]=0; if(k==0 || flag) return ; } } } int main(){ //freopen("input.txt","r",stdin); while(~scanf("%d",&n) && n){ int sum=0; flag=0; for(int i=0;i<n;i++){ scanf("%d",&sticks[i]); sum+=sticks[i]; } sort(sticks,sticks+n,cmp); for(len=sticks[0];len<=sum;len++) if(sum%len==0){ num=sum/len; memset(vis,0,sizeof(vis)); DFS(0,0,0); if(flag) break; } printf("%d\n",flag?len:sum); } return 0; }
- 1
Information
- ID
- 16358
- Time
- 1000ms
- Memory
- 10MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By