五天一小水 D - Gamblers

本文详细解析了一道ACM编程挑战题目的解题思路及实现过程,重点讨论了如何通过优化算法来避免时间复杂度过高导致的问题,并分享了从调试到最终通过的心路历程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//    一开始思路就出来了 但却用2个半小时ac        开始时没考虑负数的情况wa一次    

//  还是不懂得考虑时间复杂度,有思路 但不知是否超时    is a problem!!!     

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cmp_int(const void *a,const void *b)
{
    return *(int *)a - *(int *)b;
}
int main()
{
    int i,j,k;
    int num[1010];
    int n;
    while(scanf("%d",&n) && n != 0){
        for(i = 0;i < n;i++)
            scanf("%d",&num[i]);
        if(n < 4) {printf("no solution/n"); continue;}
        qsort(num,n,sizeof(int),cmp_int);
        int flage = 1;
        for(i = n -1;i >= 0;i--){
            if(num[i]/3 > num[i-1] && num[i - 1] > 0 && ((i-1)>=0)  ) continue;
            for(j = n - 1;j >= 0;j--){
                if(j ==i ) continue;    if( ((num[i] - num[j])/2) > num[j - 1]  &&  num[j - 1] > 0  && ((j-1)>0) && ((j-1) != i)) continue;
                for(k = n - 1;k >= 0;k--){
                    if(k == i || k == j) continue;
                    int min = num[i] - num[j] - num[k];
                    if( min > num[k-1] && num[k - 1] > 0 && ((k - 1) != i) && ((k-1) != j)) continue;
                    if( bsearch(&min,num,k,sizeof(int),cmp_int) && min != num[i] && min != num[j] && min != num[k] )
                    {
                        flage = 0;
                        printf("%d/n",num[i]);
                        goto loop;
                    }
                }
            }
        }

        loop:
        if(flage) printf("no solution/n");

    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值