zoukankan      html  css  js  c++  java
  • HDU 6435 CSGO

    按照我们蒟蒻菜队的核心思想(排序贪心)来搞这个题,首先想到暴力的方法,然后不用说肯定会TLE。。

    然后加一波玄学排序,标准就是 武器点数+Σ|(主武器的属性值-副武器相应属性的平均值)|,这样第一个不总是正解,

    因为可能会有这样的情况

    2 2 1

    0 233

    0 346

    0 123

    0 456

    主武器最大值和最小和平均值比较偏离情况是一样的,既然正解不出现在第一对,那第二对如何?第三对如何?

    然后

    #define prec 1000 //设置精确度,准备在WA与TLE间找到AC

    交上去一发就过了。。。

    就过了。。。

    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <deque>
    #include <map>
    #include <list>
    #include <set>
    using namespace std;
    #define N 100005
    typedef long long ll;
    struct wep{
        ll S;
        ll X[5];
    };
    wep Main[N],Sec[N];
    ll Msum[5],Ssum[N];
    int n,m,k;
    bool cmpm(const wep&X,const wep&x){
        ll sum1 = 0,sum2 = 0;
        for(int i = 0 ; i < k ; ++i){
            sum1+=abs(m*X.X[i]-Ssum[i]);
            sum2+=abs(m*x.X[i]-Ssum[i]);
        }
        return sum1+m*X.S>sum2+m*x.S;
    }
    bool cmps(const wep&X,const wep&x){
        ll sum1 = 0,sum2 = 0;
        for(int i = 0 ; i < k ; ++i){
            sum1+=abs(n*X.X[i]-Msum[i]);
            sum2+=abs(n*x.X[i]-Msum[i]);
        }
        return sum1+n*X.S>sum2+n*x.S;
    }
    #define prec 1000
    int main(){
        int T;
        cin>>T;
        while (T--){
            cin>>n>>m>>k;
            memset(Msum,0, sizeof(Msum));
            fill(Ssum,Ssum+5,0);
            for(int i = 0 ; i < n ; ++i){
                scanf("%lld",&Main[i].S);
                for(int j = 0 ; j < k ; ++j){
                    scanf("%lld",&Main[i].X[j]);
                    Msum[j]+=Main[i].X[j];
                }
            }
            for(int i = 0 ; i < m ; ++i){
                scanf("%lld",&Sec[i].S);
                for(int j = 0 ; j < k ; ++j){
                    scanf("%lld",&Sec[i].X[j]);
                    Ssum[j]+=Sec[i].X[j];
                }
            }
            sort(Main,Main+n,cmpm);
            sort(Sec,Sec+m,cmps);
            ll res = Main[0].S+Sec[0].S;
            for(int i = 0; i < k ;++i){
                res+=abs(Main[0].X[i] - Sec[0].X[i]);
            }
            ll cur;
            int nn = min(prec,n);
            int mm = min(prec,m);
            for(int i = 0 ; i < nn ; ++i){
                for(int j = 0 ; j < mm ; ++j){
                    cur = Main[i].S+Sec[j].S;
                    for(int ii = 0; ii < k ;++ii){
                        cur+=abs(Main[i].X[ii] - Sec[j].X[ii]);
                    }
                    res = res>cur?res:cur;
                }
            }
            printf("%lld
    ",res);
        }
    }
    

     算法的正确程度和数据强度成反比。

    天天写玄学WA/TLE算法。。

  • 相关阅读:
    css3-8 内外边距中的注意要点有哪些
    php实现 统计输入中各种字符的个数
    Java设计模式偷跑系列(十八)建模和责任链模式的实现
    Delphi 3D Glscene安装
    五通信算法:五种编码增益比较matlab模拟
    OpenGL于MFC使用汇总(三)——离屏渲染
    设计模式--模板方法 And State模式
    EXCEL 两人的建立Y轴
    LeetCode Median of Two Sorted Arrays
    wordpress常见的问题
  • 原文地址:https://www.cnblogs.com/DevilInChina/p/9521824.html
Copyright © 2011-2022 走看看