跪求AC代码,c/c++/java都可以

  1. 今日头条2018校招算法方向(第一批)

编程3

产品经理(PM)有很多好的idea,而这些idea需要程序员实现。现在有N个PM,在某个时间会想出一个 idea,每个 idea 有提出时间、所需时间和优先等级。对于一个PM来说,最想实现的idea首先考虑优先等级高的,相同的情况下优先所需时间最小的,还相同的情况下选择最早想出的,没有 PM 会在同一时刻提出两个 idea。

同时有M个程序员,每个程序员空闲的时候就会查看每个PM尚未执行并且最想完成的一个idea,然后从中挑选出所需时间最小的一个idea独立实现,如果所需时间相同则选择PM序号最小的。直到完成了idea才会重复上述操作。如果有多个同时处于空闲状态的程序员,那么他们会依次进行查看idea的操作。

求每个idea实现的时间。

输入第一行三个数N、M、P,分别表示有N个PM,M个程序员,P个idea。随后有P行,每行有4个数字,分别是PM序号、提出时间、优先等级和所需时间。输出P行,分别表示每个idea实现的时间点。


经过很长时间的调试,通过率由0%上升到20%,之后完全没头绪了。
下面是通过20%的代码

#include <iostream>

#include <algorithm>

#include <string.h>

using namespace std;

struct node {

    int num,time1,grade,time2;   //Time1 提出时间,time2 完成时间

}a[3010],b[3010];

int sum[3010];

int c[3010];


int cmp1(const node a,const node b) {   //排序

    if(a.time1!=b.time1)

        return a.time1<b.time1;

    if(a.grade!=b.grade)

        return a.grade<b.grade;

    if(a.time2==b.time2)

        return a.time2<b.time2;

    return a.num<b.num;

}

int main() {

    int N,M,P;

    cin>>N>>M>>P;

    int i;

    for(i=1;i<=P;i++) {

        cin>>a[i].num>>a[i].time1>>a[i].grade>>a[i].time2;

        b[i]=a[i];   //数据的复制

    }

    sort(a+1,a+1+P,cmp1);

    int j=1;

    

    /*for(i=1;i<=P;i++)

     cout<<a[i].num<<" "<<a[i].time1<<" "<<a[i].grade<<" "<<a[i].time2<<endl;

     cout<<endl;*/

    for(int i=1;i<=P;i++) {

        if(j<=M) {

            sum[j]=a[i].time1;

            sum[j]+=a[i].time2;

        }

        else if(j>M) {

            if(a[i].time1>sum[j-M]) {

                sum[j]=a[i].time1;

            }

            else

                sum[j]=sum[j-M];   //一个循环

            sum[j]+=a[i].time2;

        }

        j++;

    }

    memset(c,0,sizeof(c));

    /*for(i=1;i<=P;i++)

     cout<<sum[i]<<endl;

     for(i=1;i<=P;i++)

     cout<<b[i].num<<" "<<b[i].time1<<" "<<b[i].grade<<" "<<b[i].time2<<endl;

     cout<<endl;*/

    for(i=1;i<=P;i++)

        for(int j=1;j<=P;j++) {

            if(a[j].num==b[i].num&&a[j].time1==b[i].time1&&a[j].grade==b[i].grade&&

               a[j].time2==b[i].time2) {

                c[i]=j;

                //cout<<j<<endl;

                break;

            }

        }

    for(i=1;i<=P;i++)

        cout<<sum[c[i]]<<endl;

    return 0;

}



#字节跳动#
全部评论
java代码 http://blog.csdn.net/qq_23666815/article/details/79182805
点赞
送花
回复 分享
发布于 2018-01-27 21:16
可以查看别人通过的代码,对比下~
点赞
送花
回复 分享
发布于 2018-01-25 22:19
现代汽车中国前瞻数字研发中心
校招火热招聘中
官网直投
我记得枚举时间程序猿去拿idea的时间就行
点赞
送花
回复 分享
发布于 2018-01-27 01:31

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务