bzoj4004: [JLOI2015]装备购买

杂七杂八的题屯这边我觉得海星。

这里可能变成个屯代码的了。

传送门

题解

//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=505;
typedef long long LL;
typedef long double db;
using namespace std;
int n,m,ans1,ans2;

template<typename T> void read(T &x) {
    char ch=getchar(); T f=1; x=0;
    while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
    if(ch=='-') f=-1,ch=getchar();
    for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;
}

#define eps 1e-6
int dcmp(db x) { return fabs(x)<eps?0:(x>0?1:-1); }

struct vc{
    db a[N]; int val;
    friend bool operator <(const vc&A,const vc&B) {
        return A.val<B.val;
    }
}p[N];
db d[N][N];

int main() {
    //freopen("1.in","r",stdin);
    //freopen("1.out","w",stdout);
    read(n); read(m);
    For(i,1,n) For(j,1,m) read(p[i].a[j]);
    For(i,1,n) read(p[i].val); 
    sort(p+1,p+n+1);
    For(x,1,n) {
        For(j,1,m) if(dcmp(p[x].a[j])!=0) {
            if(dcmp(d[j][j])==0) {
                For(k,j,m) d[j][k]=p[x].a[k];    
                ans1++; ans2+=p[x].val; break;
            }
            else Rep(k,m,j) p[x].a[k]-=p[x].a[j]/d[j][j]*d[j][k];
        }
    }
    printf("%d %d\n",ans1,ans2);
    Formylove;
}
View Code

 

posted @ 2019-03-10 16:08  啊宸  阅读(178)  评论(0编辑  收藏  举报