Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

又被输入坑了,总WA的可以看一下

Posted by lizimeng at 2016-08-18 02:11:22 on Problem 2051
输入不保证id排序!
输入不保证id排序!
输入不保证id排序!
重要的事情说三遍!!!

讲一下我的思路。每一条Query我都会记录一个lefttime,即这个Query还差多长时间就该响应了。
每次找出lefttime最小的,这个必然最先响应,然后跟新所有的lefttime到这个时间点。然后就是接下来的一轮,直到总共响应了k次。

写之前我估算过,时间复杂度为O(n*logn + n*k),带最大规模进去算,大概是10的7次方,而且我的循环体比较简单,应该可以通过。最后试试证明,47ms。

贴一下代码:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

struct Query
{
    int id;         //id
    int period;     //响应周期
    int lefttime;   //剩余的时间
};

bool cmp(struct Query a,struct Query b)
{
    return a.id < b.id;
}

int main()
{
    int i, n, k, t1;
    struct Query q[1000];
    char input[100];

    //读取指令,并计数
    n = 0;
    gets(input);
    while(strcmp(input, "#")!=0)
    {
        //取出id号
        t1 = 0;
        for(i=9; input[i]!=' '; i++)
        {
            t1 *= 10;
            t1 += input[i] - '0';
        }
        q[n].id = t1;

        //取出period周期
        t1 = 0;
        for(i += 1; input[i]!='\0'; i++)
        {
            t1 *= 10;
            t1 += input[i] - '0';
        }
        q[n].period = t1;
        q[n].lefttime = t1;
        n++;
        gets(input);
    }

    //读取k
    scanf("%d", &k);

    //按id排序
    sort(q, q+n, cmp);

    //响应k次
    while(1)
    {
        //找最小值的下标
        t1 = q[0].lefttime;
        for(i=1;i<n;i++)
        {
            if(q[i].lefttime < t1)
                t1 = q[i].lefttime;
        }

        //修改lefttime,并响应
        for(i=0;i<n;i++)
        {
            if(q[i].lefttime==t1)
            {
                printf("%d\n", q[i].id);
                k--;
                if(k==0)
                    return 0;
                q[i].lefttime = q[i].period;
            }
            else
                q[i].lefttime -= t1;
        }
    }

    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator