码迷,mamicode.com
首页 > 其他好文 > 详细

CODEVS 2485 七夕祭 - 贪心+中位数【环形均分纸牌问题】

时间:2018-10-14 11:38:29      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:space   sig   code   lld   ons   row   using   std   i++   

CODEVS 2485 七夕祭

Sol:

当行的平均值不为整数时,不能均分,列同理。
对行和列分别做一次环形均分纸牌问题。

AC CODE:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 100000 + 100;
int read(){
    int x=0,f=1;char ch=‘ ‘;
    while(ch>‘9‘||ch<‘0‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch<=‘9‘&&ch>=‘0‘){x=(x<<3)+(x<<1)+(ch^‘0‘);ch=getchar();}
    return x*f;
} 
typedef long long ll;
int R[N],C[N];
//R=每行感兴趣的摊点数 C=每列感兴趣的摊点数 
ll sR,sC;
//sR=R的和 sC=C的和 
ll SR[N],SC[N];
//SR_i=sigma_{j=1}^{i} R_j-aveR;
int main(){
    int n,m,t;n=read();m=read();t=read();
    for(int i=1;i<=t;i++){
        int x,y;x=read();y=read();
        R[x]++,C[y]++;sR++;sC++;
    }
    bool fR=1,fC=1;
    if(sR%n!=0) fR=0;
    if(sC%m!=0) fC=0;
    ll resR=0,resC=0;
    if(fR){
        ll aveR=sR/n;
        for(int i=1;i<=n;i++) SR[i]=SR[i-1]+R[i]-aveR;
        sort(SR+1,SR+n+1);
        ll mid=SR[n/2+1];
        for(int i=1;i<=n;i++) resR+=abs(SR[i]-mid);
    }
    if(fC){
        ll aveC=sC/m;
        for(int i=1;i<=m;i++) SC[i]=SC[i-1]+C[i]-aveC;
        sort(SC+1,SC+m+1);
        ll mid=SC[m/2+1];
        for(int i=1;i<=m;i++) resC+=abs(SC[i]-mid);
    }
    if((!fR)&&(!fC)) printf("impossible");
    else if((fR)&&(!fC)){
        printf("row ");printf("%lld",resR);
    }
    else if((!fR)&&(fC)){
        printf("column ");printf("%lld",resC);
    }
    else if(fR&&fC){
        printf("both ");printf("%lld",resR+resC);
    }
    return 0;
}

CODEVS 2485 七夕祭 - 贪心+中位数【环形均分纸牌问题】

标签:space   sig   code   lld   ons   row   using   std   i++   

原文地址:https://www.cnblogs.com/Loi-Brilliant/p/9785051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!