【算法】七夕祭

题目 

七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。

于是 TYVJ 今年举办了一次线下七夕祭。

Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕,于是他们决定去 TYVJ 七夕祭游玩。

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, 接下来输出最小交换次数,与字符串之间用一个空格隔开。

数据范围

1 ≤ N , M ≤ 100000
0 ≤ T ≤ min(N ∗ M,100000)
1 ≤ x ≤ N
1 ≤ y ≤ M

输入样例:

2 3 4
1 3
2 1
2 2
2 3

输出样例:

row 1

思路 

由下图可知,行或列移动次数的最小值为:ans = |x1| + |x2| + |x3| + |x4| + ... + |xn-1| + |xn|

设a = (a1 + a2 + a3 + ... + an) / n 为平均值

a1 - x1 + x2 = a
a2 - x2 + x3 = a
a3 - x3 + x4 = a
......
an-1 - xn-1 + xn = a
an - xn + x1 = a

 由此可以推出

x1 = x1 - 0
x2 = x1 + a - a1
x3 = x2 + a - a2 = (x1 + a - a1) + a - a2 = x1 - a1 - a2 + 2*a
......
xn-1 = x1 - a1 - a2 - .... - an-2 + (n - 2) * a
xn = x1 - a1- a2 - a3 - ... - an-1 + (n - 1) * a

其中令cx

c1 = 0
c2 = a - a1
c3 = 2*a - a1 - a2
......
c(n-1) = (n - 2) * a - a1 - a2 - a3 - ... - an-2
cn = (n - 1) * a - a1 - a2 - a3 - ... an-2 - an-1

 因此原式为

ans = |x1 - c1| + |x1 - c2| + |x1 - c3| + |x1 - c4| + ... + |x1 - c(n-1)| + |x1 - cn|

原问题就被化为一个很经典的仓库选址问题,当x1 为 c1 ~ cn的中间值的时候ans为最小值。 

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int row[N],col[N],s[N],c[N];int work(int n,int a[])
{for(int i = 1; i <= n; i ++) s[i] = s[i - 1] + a[i];// 行或列的前缀和if(s[n] % n) return -1;// 如果不能整除,则表示不能每行或每列店铺都相同int avg = s[n] / n;// 求出平均值for(int i = 1;i <= n; i ++) c[i] = s[i - 1] - (i - 1) * avg;sort(c + 1,c + n + 1);// 对c数组进行排序int res = 0;for(int i = 1; i <= n ; i ++) res += abs(c[i] - c[(n + 1) / 2]);// 由中位数确定最小值return res;// 返回行或列需要移动的次数
}int32_t main()
{int n,m,cnt;cin >> n >> m >> cnt;// 输入场地大小和cl感兴趣的店铺数目while(cnt --)// 输入cl感兴趣的店铺地址{int x,y;cin >> x >> y;row[x] ++,col[y] ++;}int r = work(n,row);int c = work(m,col);if(r != -1 && c != -1) cout << "both " << r + c;else if(r != -1) cout << "row " << r;else if(c != -1) cout << "column " << c;else cout << "impossible";return 0;
}
难度:困难
时/空限制:1s / 64MB
总通过数:7881
总尝试数:21897
来源:《算法竞赛进阶指南》
算法标签

排序icon-default.png?t=N7T8https://www.acwing.com/problem/search/1/?search_content=%E6%8E%92%E5%BA%8F贪心icon-default.png?t=N7T8https://www.acwing.com/problem/search/1/?search_content=%E8%B4%AA%E5%BF%83推公式icon-default.png?t=N7T8https://www.acwing.com/problem/search/1/?search_content=%E6%8E%A8%E5%85%AC%E5%BC%8F


题目来自:105. 七夕祭 - AcWing题库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/614398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

boost.hana学习笔记之map

Hana是C元编程的头文件库&#xff0c;适用于类型和值的计算。 它提供的功能是成熟的Boost.MPL和Boost.Fusion库提供的功能的超集。 通过利用C11/14实现技术和习惯用法&#xff0c;Hana拥有比以前的元编程库更快的编译时间和运行时性能&#xff0c;同时显着提高了过程中的表达能…

2024Flutter岗位面试题总结

StatelessWidget和StatefulWidget的区别是什么&#xff1f; StatelessWidget是一个不可变的类&#xff0c;充当UI布局中某些部分的蓝图&#xff0c;当某个组件在显示期间不需要改变&#xff0c;或者说没有状态&#xff08;State&#xff09;&#xff0c;你可以使用它。 Statef…

压缩编码之变换的选择之离散余弦变换(DCT)和离散傅立叶变换(DFT)——数字图像处理

原理 变换的选择是一个关键的考量因素&#xff0c;它决定了数据是如何被压缩的。选择变换时考虑以下几个重要原则&#xff1a; 数据去关联性&#xff1a;变换的目的之一是减少数据中的相关性。例如&#xff0c;在图像压缩中&#xff0c;像素间往往高度相关。通过适当的变换&a…

git 使用场景 cherry-pick发生冲突时 ☞ 解决冲突/撤销cherry-pick

cherry-pick过程中代码冲突 cherry pick操作过程中发生代码冲突&#xff0c;Cherry pick会停下来&#xff0c;让用户决定如何继续操作# 解决冲突 1. 用户解决代码冲突 2. git add . 将修改的文件重新加入暂存区 3. git cherry-pick --continue 让 …

居中面试问题

前端常问居中面试问题 css文本居中 文本水平居中 <div class"father"><div class"child"><div> <div>子类元素为行内元素&#xff0c;则给父类元素定义text-align:center 如果子元素是块元素&#xff0c;则给子元素定义margin&…

美易官方《盘前:道指期货涨0.1% 美国12月CPI即将揭晓》

盘前&#xff1a;道指期货涨0.1% 美国12月CPI即将揭晓 随着市场对美国12月CPI数据的期待升温&#xff0c;道指期货在盘前微幅上涨0.1%。市场普遍预期该数据将显示通胀压力温和&#xff0c;这可能为美联储在接下来的货币政策会议上提供更多灵活性。在此背景下&#xff0c;投资者…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第十天-Linux下mplayer音乐播放器练习题(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

内存溢出原因和解决办法

内存泄漏&#xff1a; 原因&#xff1a; 内存泄漏是由于程序中存在未正确释放内存的情况&#xff0c;导致内存不断累积&#xff0c;最终导致内存溢出。 解决方法&#xff1a; 使用内存泄漏检测工具&#xff08;如valgrind&#xff09;来检测和修复代码中的内存泄漏问题。 …

抖音百科怎么创建?头条百科的规则和技巧

在玩抖音的时候&#xff0c;不知道注意到抖音的搜索结果没有&#xff0c;有时候会去搜索框搜索一个品牌或人物名称&#xff0c;搜索框下面翻几下大概率就会出现百科词条&#xff0c;这个词条就是抖音百科。抖音的百科属于头条百科&#xff0c;因为这两个平台都属于字节跳动旗下…

钉钉逐浪AI Agent

文&#xff5c;郝 鑫 编&#xff5c;刘雨琦 “大公司代表落后生产力&#xff0c;是慢半拍的”&#xff0c;“小创新靠大厂&#xff0c;大创新仍然要靠小厂”&#xff0c;这是以李彦宏和王小川为代表的创业老炮&#xff0c;在2023年总结出来的创新规律&#xff0c;从移动互…

Pinsker’s inequality 与 Kullback-Leibler (KL) divergence / KL散度

文章目录 Pinsker’s inequalityKullback-Leibler (KL) divergenceKL散度在matlab中的计算 KL散度在隐蔽通信概率推导中的应用 Pinsker’s inequality Pinsker’s Inequality是信息论中的一个不等式&#xff0c;通常用于量化两个概率分布之间的差异。这个不等式是由苏联数学家…

批量查询顺丰快递信息:固乔快递查询助手的实用指南

随着电商和物流行业的飞速发展&#xff0c;对于物流信息的查询需求也日益增长。固乔快递查询助手是一款高效、便捷的软件&#xff0c;能够帮助用户批量查询顺丰快递信息&#xff0c;大大提高了物流信息的管理和查询效率。 一、下载安装 首先&#xff0c;用户需要从固乔科技网站…

【C】extern 关键字

目录 extern1&#xff09;基本概念2&#xff09;用法1&#xff1a;声明全局变量3&#xff09;用法2&#xff1a;声明函数4&#xff09;用法3&#xff1a;在头文件中使用 extern extern 1&#xff09;基本概念 extern 是C语言的一个关键字。 extern 用于声明在其他源文件中定…

统计学-R语言-2.1

文章目录 前言安装过程总结 前言 上篇文章介绍了统计学-R语言的介绍&#xff0c;本篇文章介绍如何安装R软件。 安装过程 可以登录官网&#xff0c;https://www.r-project.org/&#xff0c;点击此处跳转。 点进去下滑找到China,之后找任意一个链接地址进行下载即可。 我点的是…

【Harmony OS - 消息通知】

应用可以通过接口发送通知消息&#xff0c;提醒用户关注应用中的变化。用户可以在通知栏查看和操作通知内容&#xff0c;通常用于当应用处于后台时&#xff0c;发送&#xff0c;本文主要来介绍在Harmony OS中的三种消息通知。 基础通知 总体流程有三步&#xff1a; 导入noti…

确定了!软考中级「集成」、「监理」新版教程有哪些变化?

新版教程改了哪些内容&#xff1f;2024上半年软考应该如何备考&#xff1f; 准备考24年上集成的朋友们&#xff0c;先不要慌&#xff01;备考脚步不要乱&#xff0c;改版可能还是好事呢&#xff0c;难度可能会降点&#xff1f; 2024年教程改版科目&#xff1a; ✔软考中级-集…

ARM汇编指令

数据和指令类型 ARM采用的是32位架构 ARM约定: Byte&#xff1a;8 bits Halfword&#xff1a;16 bits (2 byte) Word&#xff1a;32 bits (4 byte) Doubleword&#xff1a;64-bits&#xff08;8byte&#xff09; &#xff08;Cortex-A处理器&#xff09; 大部分ARM core …

优化改进YOLOv5算法之Deformable Attention,效果秒杀CBAM和CA等

目录 1 Deformable Attention模块原理 2 YOLOv5中加入Deformable Attention模块 2.1 common.py文件配置 2.2 yolo.py配置

由于找不到msvcp140.dll无法继续执行代码原因及解决教程分享

在计算机打开软件过程&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“由于找不到msvcp140.dll无法继续执行代码”。这个错误通常发生在使用Microsoft Visual C 2015或更高版本编译的程序运行时。那么&#xff0c;什么是msvcp140.dll文件&#xff1f;为什么会…

59.螺旋矩阵II

class Solution { public:vector<vector<int>> generateMatrix(int n) {//二维数组初始化 // int dis[4][4]{{-1,0},{1,0},{0,-1},{0,1}};int dis[4][4]{{0,1},{1,0},{0,-1},{-1,0}};//右下左上 0,1,2,3//cout<< dis[0][0]<<" "<<dis…