救救孩子吧

进攻

https://ac.nowcoder.com/acm/contest/8564/A

链接:https://ac.nowcoder.com/acm/contest/8564/A
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

设计思路,就是贪心;
我只要把战斗机攻击和价值点排序,再来比较,攻击升序,d和value 按value 降序,然后攻击数组从尾部i=n-1开始来和数据结构数组的防御力j=0:和d进行比较,只要一旦比d大的出现,那个value可能是它的最大贡献点,j也不需要重置0,因为前面的是d都比攻击前一个的攻击力大,所以后面的攻击力a[i]继续往后比较,复杂度为O(n);

#include<iostream>
#include<algorithm>
using namespace std;


struct data{
    int d;
    int value;
};

bool cmp(data a, data b){
   return a.value>b.value;

}

int main()
{

    int n,m,i,j;
    scanf("%d%d",&n,&m);
    struct data dept[m],temp;
    int a[n];
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]); 
    } 
    for(i=0;i<m;i++)
    {
        scanf("%d",&dept[i].d); 
    } 
    for(i=0;i<m;i++)
    {
        scanf("%d",&dept[i].value); 
    } 
    int sum =0;
    sort(a,a+n);

    sort(dept,dept+m,cmp);

    for(i=n-1;i>=0;i--)
    {
        //j=0;
        while(j<m&&a[i] <= dept[j].d)
             j++;
        if(j<m)
        {
            sum+=dept[j].value;    
        }
    }


    printf("%d\n",sum);
    return 0;
}

加上j=0;应该是超时问题,通过60%,但是我的设计是不需要O(n*m)的复杂度,只需要O(n)即可,可是通过率只有10%,求大佬解答,可能是我的设计错误,可我一直没看出来,本来想发提问的,

全部评论

相关推荐

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