bzoj3032 七夕祭题解
题面
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 七夕祭题解的更多相关文章
- BZOJ3032 七夕祭
		
https://remmina.github.io/BZPRO/JudgeOnline/3032.html 题目 背景 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是TYVJ 今年举办了一次线 ...
 - BZOJ3032 七夕祭[中位数]
		
发现是一个类似于“纸牌均分”的问题.然后发现,只要列数整除目标.行数整除目标就一定可以. 如果只移动列,并不会影响行,也就是同一行不会多不会少.只移动行同理. 所以可以把两个问题分开来看,处理起来互不 ...
 - <BZOJ3032>七夕祭
		
水 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> ...
 - [Poetize II]七夕祭
		
描述 Description TYVJ七夕祭和11区的夏祭的形式很像.矩 形的祭典会场由N排M列共计N×M个摊点组成.虽然摊点种类繁多,不过cl只对其中的一部分摊点感兴趣,比如章鱼烧.苹果糖.棉花糖. ...
 - [JZOJ3382] [NOIP2013模拟] 七夕祭 解题报告
		
Description 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是TYVJ今年举办了一次线下七夕祭.Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. ...
 - 2018.11.3 Nescafe18 T1 七夕祭
		
题目 背景 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是 TYVJ 今年举办了一次线下七夕祭.Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕,于是他们决定去 TYVJ七夕祭游玩. ...
 - JZOJ 3382. 【NOIP2013模拟】七夕祭
		
3382. [NOIP2013模拟]七夕祭 Time Limits: 1000 ms Memory Limits: 131072 KB Detailed Limits Goto Problem ...
 - AcWing:105. 七夕祭(前缀和 + 中位数 + 分治 + 贪心)
		
七夕节因牛郎织女的传说而被扣上了「情人节」的帽子. 于是TYVJ今年举办了一次线下七夕祭. Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. TYVJ七夕祭和11 ...
 - 【NOIP2013模拟】七夕祭
		
题目描述七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是TYVJ今年举办了一次线下七夕祭.Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. TYVJ七夕祭和 ...
 
随机推荐
- 浅谈设计模式及python实现
			
设计模式及Python实现 设计模式是什么? Christopher Alexander:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样你就能一次又一次地使用 ...
 - 放出一批学生管理系统jsp源码,部分有框架
			
基于jsp+struts 2的学生管理系统eclipse - 源码码头 https://www.icodedock.com/article/25.html 基于jsp+mysql的JSP学生成绩管 ...
 - 放出一批jsp图书管理系统图书借阅系统源码代码运行
			
基于jsp+mysql的JSP图书销售管理系统 https://www.icodedock.com/article/105.html基于jsp+Spring+Spring MVC的Spring图书借阅 ...
 - 深入理解JVM-类加载器深入解析(1)
			
类加载 在java代码中,类型的加载,连接与初始化过程都是在程序运行期间完成的 类型:表示的Object本身,并不是指一个对象,也就是class. 运行期间:表示的是一种runtime的概念,在运行期 ...
 - LFS8.3BOOT引导疑点解决
			
LFS系统 的BOOT引导 在LFS书中写到的BOOT引导,时直接将宿主机的BOOT分区挂载当LFS的BOOT分区中,虽然这样也是可以实现BOOT引导的,但是我并不想这样做,所以BOOT引导就变得有些 ...
 - Jersey用户指南学习笔记1
			
Jersey用户指南是Jersey的官方文档, 英文原版在这:https://jersey.github.io/documentation/latest/index.html 中文翻译版在这:http ...
 - mui的app页面使用layui填充数据
			
在mui的开发中有个坑,mui.plusReady在web上使用时是不会起作用的,只能在app上才行,所以推荐自己测试时使用mui.ready去写加载时的方法. 前端请求的返回格式为json,所以在后 ...
 - 用xshell链接虚拟机上的linux
			
[步骤]一.安装VMware直接点击下一步即可 二.安装linux下载CentOS,在VMware中安装,这个网上有很多教程,这里就不赘述了. 三.配置要想连接上xshell,需要配置IP,将Linu ...
 - 安利一个免费下载VIP文档神器
			
今天安利给大伙一个非非非常好用的可以免费下载VIP文档的下载神器------冰点文库下载器,用过的人都说好.操作简单,小巧轻便,完全免费.支持百度.豆丁.畅享.mbalib.hp009.max.boo ...
 - 【hdu 2544最短路】【Dijkstra算法模板题】
			
Dijkstra算法 分析 Dijkstra算法适用于边权为正的情况.它可用于计算正权图上的单源最短路( Single-Source Shortest Paths, SSSP) , 即从单个源点出发, ...