回 帖 发 新 帖 刷新版面

主题:这道题目可以有更优化的解法吗?


http://acm.zju.edu.cn/show_problem.php?pid=2613
运行时间为00:00.18,我看上面有人用00:00.08 通过的,呵呵
#include <queue>
#include <algorithm>
#include <iostream>
using namespace std;

const int size = 10001;

bool hasbid[size];
int num[size];

struct bid {
    int price;
    bool first;
    char* name;
};

bool cmp(bid a, bid b)
{
    if (num[a.price] == num[b.price])
    {
        if (a.price == b.price)
        {
            return !a.first;
        }
        
        return a.price > b.price;
    }
    return num[a.price] > num[b.price];
}



vector<bid> v;




main()
{
    int T;
    int n, m;
    char name[50];
    int price;
    int i, time = 1;
    scanf("%d", &T);
    while (T --)
    {
        scanf("%d%d", &n, &m);
        memset(hasbid, false, sizeof(bool) * (n + 1) );
        memset(num, 0, sizeof(int) * (n + 1) );
        

        v.clear();

        for (i = 0; i < m; i ++)
        {
            scanf("%s%d", name, &price);
            num[price] ++;
            bid temp;
            temp.price = price;
            char* t_char = (char *)malloc(strlen(name) + 1);
            strcpy(t_char, name);
            t_char[strlen(name)] = '\0';
            temp.name = t_char;
            if (!hasbid[price])
            {
                temp.first = true;
                hasbid[price] = true;
            } else {
                temp.first = false;
            }

            v.push_back(temp);
            
        }

        make_heap(v.begin(), v.end(), cmp);
        
        printf("Case %d:\n", time ++);
        printf("The winner is %s.\n", v[0].name);
        printf("The price is %d.\n", v[0].price);
        if(T)
            printf("\n");
    }
}

回复列表 (共2个回复)

沙发

其实楼主代码里的变量名挺好的,但是还是希望楼主能够把程序的目的说一下。

板凳

bool cmp(bid a, bid b)我都看不懂,似乎是在比较大小。
不过如果你确定你的程序对的话,不用vector而直接用数组我想可能会运行时间更短点,当然我也不知道是不是可以不用vector。

我来回复

您尚未登录,请登录后再回复。点此登录或注册