zoukankan      html  css  js  c++  java
  • HDU2141Can you find it?

    HDU2141Can you find it?   http://acm.hdu.edu.cn/showproblem.php?pid=2141

    这个题吧,错在了qsort  和  sort 的问题,

    qsort    WA   的代码

    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    #define MAX 501
    #define MAXMAX 250001
    #define LAR 1001
    int a[MAX], b[MAX], c[MAX];
    int lm[MAXMAX];
    int s[LAR];
    
    bool cmp(int a, int b)
    {
        return a < b;
    }
    
    int cmp(const void * a, const void * b)
    {
        return *(int *)a - *(int *)b;
    }
    int main()
    {
        int l, m, n, ss,f = 1;
    
        while (~scanf("%d%d%d", &l, &m, &n))
        {
            int a[MAX], b[MAX], c[MAX];
            int lm[MAXMAX];
            int s[LAR];
            int i, j, k = 0,t = 0,bleg = 0;
    
            for (i = 0; i < l; i++)    scanf("%d", &a[i]);
            for (i = 0; i < m; i++)    scanf("%d", &b[i]);
            for (i = 0; i < n; i++)    scanf("%d", &c[i]);
    
            for (i = 0; i < l; i++)
            {
                    for(j = 0; j < m; j++)
                    {
                        lm[k++] = a[i] +b[j];
                    }
            }
    
            scanf("%d", &ss);
            for (i = 0; i < ss; i++)
            {
                scanf("%d", &s[i]);
            }
    
            printf("Case %d:
    ",f++);
    
            qsort(lm, k, sizeof(int), cmp);
    
            for(i=0;i<ss;i++)
            {
                bleg = 0;                //printf("s[%d] = %d  k = %d
    ",i,s[i],k);
                for(j=0;j<n;j++)
                {
                    if(s[i] - c[j] >= lm[0] && s[i] - c[j] <= lm[k-1])
                    {
                        int min = 0, max = k - 1, mid;
                        t = s[i] - c[j];
                        while (min <= max)
                        {
                            mid = (min + max) / 2;    //printf("t = %d min = %d,max = %d
    ",t,min,max);    printf("mid = %d,lm[mid] = %d
    ",mid,lm[mid]);
                            if (lm[mid] > t)
                            {
                                max = mid - 1;
                            }
                            else if (lm[mid] < t)
                            {
                                min = mid + 1;
                            }
                            else
                            {
                                bleg = 1;
                                break;
                            }
                        }
                    }
    
                    if (bleg == 1) break;
    
                }
            if (bleg == 1)
                printf("YES
    ");
            else
                printf("NO
    ");
            }
    
        }
    return 0;
    }


    sort     A    的代码

    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    #define MAX 501
    #define MAXMAX 250001
    #define LAR 1001
    int a[MAX], b[MAX], c[MAX];
    int lm[MAXMAX];
    int s[LAR];
    
    bool cmp(int a, int b)
    {
        return a < b;
    }
    
    int cmp(const void * a, const void * b)
    {
        return *(int *)a - *(int *)b;
    }
    int main()
    {
        int l, m, n, ss,f = 1;
    
        while (~scanf("%d%d%d", &l, &m, &n))
        {
            int a[MAX], b[MAX], c[MAX];
            int lm[MAXMAX];
            int s[LAR];
            int i, j, k = 0,t = 0,bleg = 0;
    
            for (i = 0; i < l; i++)    scanf("%d", &a[i]);
            for (i = 0; i < m; i++)    scanf("%d", &b[i]);
            for (i = 0; i < n; i++)    scanf("%d", &c[i]);
    
            for (i = 0; i < l; i++)
            {
                    for(j = 0; j < m; j++)
                    {
                        lm[k++] = a[i] +b[j];
                    }
            }
    
            scanf("%d", &ss);
            for (i = 0; i < ss; i++)
            {
                scanf("%d", &s[i]);
            }
    
            printf("Case %d:
    ",f++);
    
            qsort(lm, k, sizeof(int), cmp);
    
            for(i=0;i<ss;i++)
            {
                bleg = 0;                //printf("s[%d] = %d  k = %d
    ",i,s[i],k);
                for(j=0;j<n;j++)
                {
                    if(s[i] - c[j] >= lm[0] && s[i] - c[j] <= lm[k-1])
                    {
                        int min = 0, max = k - 1, mid;
                        t = s[i] - c[j];
                        while (min <= max)
                        {
                            mid = (min + max) / 2;    //printf("t = %d min = %d,max = %d
    ",t,min,max);    printf("mid = %d,lm[mid] = %d
    ",mid,lm[mid]);
                            if (lm[mid] > t)
                            {
                                max = mid - 1;
                            }
                            else if (lm[mid] < t)
                            {
                                min = mid + 1;
                            }
                            else
                            {
                                bleg = 1;
                                break;
                            }
                        }
                    }
    
                    if (bleg == 1) break;
    
                }
            if (bleg == 1)
                printf("YES
    ");
            else
                printf("NO
    ");
            }
    
        }
    return 0;
    }


    这是为什么!!!!!待解答

    www.cnblogs.com/tenlee
  • 相关阅读:
    Beta冲刺——集合随笔
    Beta冲刺——用户调查报告
    Beta冲刺——总结
    Beta冲刺——代码规范、冲刺任务与计划
    Beta冲刺——Day 7
    Beta冲刺——Day 6
    Beta冲刺——Day 5
    Beta冲刺——Day 4
    Beta冲刺——Day3
    beta冲刺汇总
  • 原文地址:https://www.cnblogs.com/tenlee/p/4420157.html
Copyright © 2011-2022 走看看