D - design-easy

来源:互联网 发布:手机最火软件 编辑:程序博客网 时间:2024/05/16 20:09
点击打开链接

D -design-easy
Crawling in process...Crawling failed
Time Limit:3000MS    Memory Limit:0KB    64bit IO Format:%lld & %llu
SubmitStatus

Description

Problem C - Sumsets

Given S, a set of integers, find the largest d such that a + b + c = d where a, b, c, and d are distinct elements of S.

Input

Several S, each consisting of a line containing an integer 1 <= n <= 1000 indicating the number of elements in S, followed by the elements of S, one per line. Each element of S is a distinct integer between -536870912 and +536870911 inclusive. The last line of input contains 0.

Output

For each S, a single line containing d, or a single line containing "no solution".

Sample Input

52 3 5 7 1252 16 64 256 10240

Output for Sample Input

12no solution


真是好题啊,这题让我明白了一个道理,qsort才是真正的快排。用sor果断TLE,qsort果断AC。

#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int m;int z[1000+10];/*int cmp(int a1,int b1){    return a1<b1;}*/int cmp(const void*a,const void*b){    int *c=(int*)a;    int *d=(int*)b;    return *d-*c;}int main(){    while(scanf("%d",&m),m)    {        memset(z,0,sizeof(z));        for(int a=0;a<m;a++)        scanf("%d",&z[a]);        qsort(z,m,sizeof(int),cmp);        int flag=0;        for(int l=0;l<m;l++)        {            for(int i=0;i<m;i++)            {                if(i==l)continue;                for(int j=0;j<m;j++)                {                    if(j==i||j==l)continue;                    for(int k=0;k<m;k++)                    {                        if(k==l||k==i||k==j)continue;                        if(z[l]==z[i]+z[j]+z[k])                       {flag=1;printf("%d\n",z[l]);break;}                    }                    if(flag)break;                }                if(flag)break;            }            if(flag)break;        }        if(!flag)printf("no solution\n");    }    return 0;}