题面

TYVJ七夕祭和11区的夏祭的形式很像。矩形的祭典会场由N排M列共计N×M个摊点组成。虽然摊点种类繁多,不过cl只对其中的一部分摊点感兴趣,比如章鱼烧、苹果糖、棉花糖、射的屋……什么的。Vani预先联系了七夕祭的负责人zhq,希望能够通过恰当地布置会场,使得各行中cl感兴趣的摊点数一样多,并且各列中cl感兴趣的摊点数也一样多。

不过zhq告诉Vani,摊点已经随意布置完毕了,如果想满足cl的要求,唯一的调整方式就是交换两个相邻的摊点。两个摊点相邻,当且仅当他们处在同一行或者同一列的相邻位置上。由于zhq率领的TYVJ开发小组成功地扭曲了空间,每一行或每一列的第一个位置和最后一个位置也算作相邻。现在Vani想知道他的两个要求最多能满足多少个。在此前提下,至少需要交换多少次摊点。

输入

第一行包含三个整数N和M和T。T表示cl对多少个摊点感兴趣。

接下来T行,每行两个整数x, y,表示cl对处在第x行第y列的摊点感兴趣。

输出

首先输出一个字符串。如果能满足Vani的全部两个要求,输出both;如果通过调整只能使得各行中cl感兴趣的摊点数一样多,输出row;如果只能使各列中cl感兴趣的摊点数一样多,输出column;如果均不能满足,输出impossible。

如果输出的字符串不是impossible, 接下来输出最小交换次数,与字符串之间用一个空格隔开。

解析

此题我们可分析得交换左右相邻的摊点只会改变某两列cl感兴趣的摊点数,不会改变每一行cl感兴趣的摊点数,同理交换上下相邻的摊点只会改变某两行cl感兴趣的摊点数,不会改变每一列cl感兴趣的摊点数。也就是说左右交换和上下交换是两个相互独立的过程,故可以独立求解,此问题就被划分为两个问题。

1.通过最少次数的左右交换使每列中cl感兴趣的摊点数相同。

2.通过最少次数的上下交换使每行中cl感兴趣的摊点数相同。

显然当且仅当m|T时1问题有解,n|T时2问题有解,我们的目的就是让每行都有T/n个cl感兴趣的摊点,每列都有T/m个cl感兴趣的摊点。此时问题就类似于前面 均分纸牌的拓展

(以下简称均分纸牌问题)

此题又与均分纸牌有一些区别,它可看作是一个环形的均分纸牌问题我们便可以去枚举它的断点。

(以下的A[i]是减去了T/m的,S[i]是A[i]的前缀和,即 S[i]=\(\sum_{j=1}^i\)A[i] )

一般均分纸牌问题每个人持有的纸牌数A[1] \(\cdots\) A[m] 和前缀和S[i] \(\cdots\) S[m]

如果在第k个人断开这m个人持有的纸牌和前缀和是

A[K+1],A[K+2] \(\cdots\) A[m],A[1] \(\cdots\) A[K]。

S[K+1],S[K+2] \(\cdots\) S[m],S[1] \(\cdots\) S[K]。

故可求的公式 \(\sum_{i=1}^m\) \(\mid\)S[i]-S[k]\(\mid\),我们就要求得其最小值,此时问题又变为了前面的货仓选址排序后求得最小值即可。

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,T,xi[100010],yi[100010],A[100010],S[100010],nx,ny,u,v,k;
int main(){
scanf("%d %d %d",&n,&m,&T);
for(int i=1;i<=T;i++){
scanf("%d %d",&u,&v);
xi[u]++;
yi[v]++;
}
if(!(T%n)){
nx=T/n;
for(int i=1;i<=n;++i){
A[i]=xi[i]-nx;
S[i]=S[i-1]+A[i];
}
sort(S+1,S+1+n);
k=n>>1;
if(n&1)k++;
u=0;
for(int i=1;i<=n;++i){
u+=abs(S[i]-S[k]);
}
}
if(!(T%m)){
ny=T/m;
for(int i=1;i<=m;++i){
A[i]=yi[i]-ny;
S[i]=S[i-1]+A[i];
}
sort(S+1,S+1+m);
k=m>>1;
if(m&1)k++;
v=0;
for(int i=1;i<=m;++i){
v+=abs(S[i]-S[k]);
}
}
if((!(T%m))&&(!(T%n))) printf("both %lld",(long long)u+v);//此处要强制类型转换防止溢出
else if(!(T%n)) printf("row %d",u);
else if(!(T%m)) printf("column %d",v);
else printf("impossible");
}

bzoj3032 七夕祭题解的更多相关文章

  1. BZOJ3032 七夕祭

    https://remmina.github.io/BZPRO/JudgeOnline/3032.html 题目 背景 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是TYVJ 今年举办了一次线 ...

  2. BZOJ3032 七夕祭[中位数]

    发现是一个类似于“纸牌均分”的问题.然后发现,只要列数整除目标.行数整除目标就一定可以. 如果只移动列,并不会影响行,也就是同一行不会多不会少.只移动行同理. 所以可以把两个问题分开来看,处理起来互不 ...

  3. <BZOJ3032>七夕祭

    水 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> ...

  4. [Poetize II]七夕祭

    描述 Description TYVJ七夕祭和11区的夏祭的形式很像.矩 形的祭典会场由N排M列共计N×M个摊点组成.虽然摊点种类繁多,不过cl只对其中的一部分摊点感兴趣,比如章鱼烧.苹果糖.棉花糖. ...

  5. [JZOJ3382] [NOIP2013模拟] 七夕祭 解题报告

    Description 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是TYVJ今年举办了一次线下七夕祭.Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. ...

  6. 2018.11.3 Nescafe18 T1 七夕祭

    题目 背景 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是 TYVJ 今年举办了一次线下七夕祭.Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕,于是他们决定去 TYVJ七夕祭游玩. ...

  7. JZOJ 3382. 【NOIP2013模拟】七夕祭

    3382. [NOIP2013模拟]七夕祭 Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits   Goto Problem ...

  8. AcWing:105. 七夕祭(前缀和 + 中位数 + 分治 + 贪心)

    七夕节因牛郎织女的传说而被扣上了「情人节」的帽子. 于是TYVJ今年举办了一次线下七夕祭. Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. TYVJ七夕祭和11 ...

  9. 【NOIP2013模拟】七夕祭

    题目描述七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是TYVJ今年举办了一次线下七夕祭.Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. TYVJ七夕祭和 ...

随机推荐

  1. 【POJ - 1064】Cable master(二分)

    Cable master Descriptions 输入2个数 N  K n条绳子    要分成大于等于k段 求每段最长多长呢?并且每段不能小于1cm 必须以厘米精度写入数字,小数点后正好是两位数.如 ...

  2. java课堂 动手动脑2

    1.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数 Modulus=231-1=int.MaxValue, Multiplier=75=16807. C=0 当显示过231-2个数 ...

  3. Windows to Linux API 映射

  4. restapi(4)- rest-mongo : MongoDB数据库前端的httpserver

    完成了一套标准的rest风格数据库CRUD操作httpserver后发现有许多不足.主要是为了追求“通用”两个字,想把所有服务接口做的更“范generic”些,结果反而限制了目标数据库的特点,最终产生 ...

  5. java-极光推送教程

    一.准备工作: 1.访问极光推送官网:https://www.jiguang.cn/accounts/login/form 2.注册登陆,拿到appKey和masterSecret 3.创建一个应用, ...

  6. U盘重装MacOS-Sierra系统

    Mac系统重新安装两种方法: 1.在线远程重装. 2.制作启动U盘进行重装. 理论上第一种比较简单,但是会比较耗时,实际操作中,由于网上下载的系统版本低于我现在MacOS的版本,导致无法安装,因此只能 ...

  7. WPF中TimeSpan的坑

    记一次在WPF中,在将格式为“DD.HH:mm:ss”字符串转换成TimeSpan时遇到的坑 如果字符串为:DD.HH:mm:ss,转换结果正确.例如: var currentValue = &quo ...

  8. ES 27 - Elasticsearch脚本的使用实践

    目录 1 关于脚本 2 脚本使用的最佳实践 2.1 创建脚本并存储 2.2 脚本的缓存 2.3 Script Field - 脚本字段 本文以 ES 6.6.0 版本为例进行演示. 1 关于脚本 ES ...

  9. .NET Core下操作Git,自动提交代码到 GitHub

    .NET Core 3.0 预览版发布已经好些时日了,博客园也已将其用于生产环境中,可见 .NET Core 日趋成熟 回归正题,你想盖大楼吗?想 GitHub 首页一片绿吗?今天拿她玩玩自动化提交代 ...

  10. Springboot源码分析之番外篇

    摘要: 大家都知道注解是实现了java.lang.annotation.Annotation接口,眼见为实,耳听为虚,有时候眼见也不一定是真实的. /** * The common interface ...