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

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;
}

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

时间: 2024-08-10 19:52:19

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

P2512 [HAOI2008]糖果传递 - 贪心+中位数【环形均分纸牌问题】

P2512 [HAOI2008]糖果传递 Sol: 环形均分纸牌问题 考虑最基本的均分纸牌问题,相当于将环从1与n之间断开. 令\(res_i\)表示第\(i\)个人达到平均值所用步数,ave$表示糖果的平均数. 则 \(res_1=a_1-ave\) \(res_2=a_2-ave+res_1=a_1+a_2+2*ave\) \(res_3=a_3-ave+res_2=a_1+a_2+a_3-3*ave\) \(\dots\) \(res_i=a_i-ave+res_{i-1}=\sum_{j

中位数性质(环形均分纸牌)

水了一个环形均分纸牌的问题: 叫七夕祭:原题链接 这个题就是一个裸的环形均分纸牌问题 用到的性质每个数到中位数距离之和是最短的. code: #include <iostream> #include <cstring> #include <string> #include <algorithm> using namespace std; const int N = 1e5+10; typedef long long ll; //中位数性质:每个点到中位数距离

货仓选址模型与环形均分纸牌

目录 货仓选址模型 环形均分纸牌 货仓选址模型 可以如此描述:轴上有k个点,从轴上选择一点,使得此点到其他点的距离之和最小. 固定解:取k个点坐标的中位数 原因:取一点,异色于原先k个点,设此点正方向有p个与此点异色的点,负方向则有q个. 若将点向正方向移动,则距离之和减少p,增加q,反之减少q,增加p:当p.q不等时, 此点所在地必定不是最优解,按照更优方案改动此点的位置,直到p=q,最优解形成. 环形均分纸牌 经典均分纸牌的公式:\(sum(a[1],a[m])\). 环形均分纸牌的公式:\

[bzoj3032][TYVJ P1924]七夕祭(环形均分纸牌,货仓选址)

题意 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子. 于是TYVJ今年举办了一次线下七夕祭. Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. TYVJ七夕祭和11区的夏祭的形式很像. 矩形的祭典会场由N排M列共计N×M个摊点组成. 虽然摊点种类繁多,不过cl只对其中的一部分摊点感兴趣,比如章鱼烧.苹果糖.棉花糖.射的屋--什么的. Vani预先联系了七夕祭的负责人zhq,希望能够通过恰当地布置会场,使得各行中cl感兴趣的摊点数一样多,并且各列中cl感兴

【codevs】【贪心】1098均分纸牌

有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上:在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上:其他堆上取的纸牌,可以移到相邻左边或右边的堆上. 现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多. 例如 N=4,4 堆纸牌数分别为: ① 9 ② 8 ③ 17 ④ 6 移动3次可达到目的: 从 ③ 取 4 张牌放到 ④

【贪心算法】均分纸牌

题目: 有N堆纸牌,编号分别为1,2,-,n.每堆上有若干张,但纸牌总数必为n的倍数.可以在任一堆上取若干张纸牌,然后移动.移牌的规则为:在编号为1上取的纸牌,只能移到编号为2的堆上:在编号为n的堆上取的纸牌,只能移到编号为n-1的堆上:其他堆上取的纸牌,可以移到相邻左边或右边的堆上.现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多.例如:n=4,4堆纸牌分别为:① 9 ② 8 ③ 17 ④ 6 移动三次可以达到目的:从③取4张牌放到④ 再从③区3张放到②然后从②去1张放到①.

环形均分纸牌的可链化处理证明

题目概括: 有N堆纸牌纸牌成环形.每次能够将一堆纸牌向相邻的另一堆转移一张,求最少转移多少次能够使每堆纸牌的数量一样多? 显然: 对于每一个连接处是单向传递的. 反证法: 若不成立,则传递示图定如下所示: 一. 此时,我们可以找出传递的值最小的一处的传递值 ,然后将每处都减小此值.显然是等效且更优的. 所以不可能存在这种情况. 二. 对于这种情况,我们可以发现都是有A传递至B,那么我们可以取消D的 其中一端的传递,由另一端完成,显然是可以做到的. 其他的情况都以此类推. 原文地址:https:/

Lydsy3032 七夕祭(货仓选址+均分纸牌结合)

环形均分纸牌 #include<cstdio> #include<cmath> #include<algorithm> using namespace std; typedef long long ll; const int maxn=100000+10; ll heng[maxn],shu[maxn]; ll sum[maxn]; ll getans(ll a[maxn],int n){ ll k=a[0]/n; for (int i=1;i<=n;i++){

[Poetize II]七夕祭

描述 Description TYVJ七夕祭和11区的夏祭的形式很像.矩 形的祭典会场由N排M列共计N×M个摊点组成.虽然摊点种类繁多,不过cl只对其中的一部分摊点感兴趣,比如章鱼烧.苹果糖.棉花糖.射的屋……什么的. Vani预先联系了七夕祭的负责人zhq,希望能够通过恰当地布置会场,使得各行中cl感兴趣的摊点数一样多,并且各列中cl感兴趣的摊点数也一样多.    不 过zhq告诉Vani,摊点已经随意布置完毕了,如果想满足cl的要求,唯一的调整方式就是交换两个相邻的摊点.两个摊点相邻,当且仅