AtCoder Beginner Contest 100 D - Patisserie ABC[˼ά]

匿名 (未验证) 提交于 2019-12-03 00:29:01

D - Patisserie ABC

题意:n个物品,每个物品有三个属性a,b,c(可能正,可能负) .现在取m个,使得|sigma a| + |sigma b| + |sigma c| 最大化

极负/极正i*a+j*b+c*k排序.8种情况必有一种情况满足要求

#include<bits/stdc++.h> #define PI acos(-1.0) #define pb push_back #define F first #define S second using namespace std; typedef long long ll; const int N=1e5+5; //ll a[N],sum[N]; struct node{     ll a,b,c; }p[N]; int n,m,i,j,k; bool cmp(node x,node y){     return x.a*i+x.b*j+x.c*k>y.a*i+y.b*j+y.c*k; } int main(void){     ios::sync_with_stdio(false);     cin.tie(0);cout.tie(0);     cin >> n>>m;     ll ans=0;     for(int i=1;i<=n;i++)   cin >>p[i].a>>p[i].b >>p[i].c;     for( i=-1;i<=1;i+=2){// i,j,k分别代表绝对值里的符号趋向         for( j=-1;j<=1;j+=2){             for( k=-1;k<=1;k+=2){                 sort(p+1,p+1+n,cmp);                 ll t[4]={0};                 for(int te=1;te<=m;te++)    t[1]+=p[te].a,t[2]+=p[te].b,t[3]+=p[te].c;                 ans=max(ans,t[1]*i+t[2]*j+t[3]*k);             }         }     }     cout << ans << endl;      return 0; } 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!