jzoj3382-七夕祭【贪心,中位数】

正题


大意

有k个摊点,有n行m列,每次只能让摊点移动到相邻的格子(如果相邻的有那么就交换)。要求最少的移动次数让每行每列的摊点数一样,如果不行就输出只能做到行或只能做到列或都不行。注意最上面一行和最下面一行相邻,最左边一行和最右边一行相邻。


解题思路

我们先不考虑最上和最左的情况。
我们可以发现列和行其实是不会相互影响的,那么我们可以分开来处理。我们可以发现行可以的情况仅当k%n==0k\%n==0k%n==0而列可行仅当k%m==0k\%m==0k%m==0,然后我们就可以处理第一个输出了。
然后我们会发现这样的话就十分的像均分纸牌,我们选择一个中转行/列,将任何每行/列多余的或缺少的都当做一个东西,然后将所有东西移动到这个中转行/列就可以做到求值了,然后我们要选择最优的中转点的话那么我们取中位数是最优的。
接下来我们可以考虑边界的情况了,我们可以将缺少的前缀和取中位数然后像前面一样求值就是最优的。
原理:
我们其实就是枚举断点然后求中位数,而如果断点是kkk,那么剩下的位置的前缀和:

K/M前缀和
A[k+1]A[k+1]A[k+1]S[k+1]−S[k]S[k+1]-S[k]S[k+1]S[k]
A[k+2]A[k+2]A[k+2]S[k+2]−S[k]S[k+2]-S[k]S[k+2]S[k]
..................
A[M]A[M]A[M]S[M]−S[k]S[M]-S[k]S[M]S[k]
A[1]A[1]A[1]S[1]+S[M]−S[k]S[1]+S[M]-S[k]S[1]+S[M]S[k]
..................
A[k]A[k]A[k]S[k]+S[M]−S[k]S[k]+S[M]-S[k]S[k]+S[M]S[k]

代码

#include<cstdio>
#include<algorithm>
#define K 100001
using namespace std;
int n,m,k;
long long row[K],col[K],w,c[K],ans,c1,t1;
int main()
{scanf("%d%d%d",&n,&m,&k);for (int i=1;i<=k;i++){scanf("%lld%lld",&c1,&t1);row[c1]++;col[t1]++;}if (k%n==0&&k%m==0) w=0,printf("both ");else if (k%n==0) w=1,printf("row ");else if (k%m==0) w=2,printf("column ");else {printf("impossible");return 0;}if (!w||w==1)//行需要处理{for (int i=1;i<=n;i++)c[i]=c[i-1]+row[i]-k/n;//前缀和sort(c+1,c+1+n);//排序for (int i=1;i<=n;i++)ans+=abs(c[i]-c[(n+1)/2]);//计算价值}if (!w||w==2)//列需要处理{for (int i=1;i<=m;i++)c[i]=c[i-1]+col[i]-k/m;sort(c+1,c+1+m);for (int i=1;i<=m;i++)ans+=abs(c[i]-c[(m+1)/2]);}printf("%lld",ans);
}

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

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

相关文章

不管什么事,只要用心做,总不会太差!

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】。KTV项目基本已经做完&#xff0c;于是自上周五以来就开始挨个小组的进行试讲。上周五第一次试讲&#xff0c;只讲了三个小组&#xff0c;整体来说讲的都不行。组员与组长之间的协调不统一&#xff…

学生自定义的键盘,功能强大齐全!!!

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号&#xff1a;雄雄的小课堂。今天给大家介绍一款键盘&#xff0c;本款键盘属于私人订制&#xff0c;“专业性”很强&#xff0c;且功能齐全&#xff0c;在使用时可以一人使用&#xff0c;在某种特定的场合下&#xff0c;两…

jzoj3383-太鼓达人【欧拉回路,位运算】

正题 大意 一个数K&#xff0c;求一个最长的01环形序列&#xff08;头和尾相连&#xff09;&#xff0c;使得每个长度为k的连续子序列都不相同。&#xff08;要输出这个串&#xff0c;如果有多个答案输出字典序最小的&#xff09; 解题思路 尝试将长度为k的01序列全排列一下我…

度量.net framework 迁移到.net core的工作量

把现有的.net framework程序迁移到.net core上&#xff0c;是一个非常复杂的工作&#xff0c;特别是一些API在两个平台上还不能同时支持。两个类库的差异性,通过人工很难识别全。好在微软的工程师们考虑到了我们顾虑&#xff0c;为我们提前设计了一个工具&#xff1a;.NET Port…

深入理解Java ClassLoader及在 JavaAgent 中的应用

转载自 深入理解Java ClassLoader及在 JavaAgent 中的应用 背景 众所周知, Java 或者其他运行在 JVM(java 虚拟机)上面的程序都需要最终便以为字节码,然后被 JVM加载运行,那么这个加载到虚拟机的过程就是 classloader 类加载器所干的事情.直白一点,就是 通过一个类的全限定…

如何从Gitee中拉取项目到HBuilder中?

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。今天&#xff0c;给大家分享一下&#xff0c;如何使用HBuilder连接gitee&#xff0c;进行代码的提交&#xff08;明天在看&#xff09;与拉取。1首先&#xff0c;在HBuilder中下载Git的插件…

jzoj3384-理工男【欧拉定理,gcd,数论】

正题 大意 给出一个分数ABAB求它在k进制下的小数循环。 如果是有限小数直接输出位数 无限循环输出混循环节和循环节长度。 代码 直接切正题 用a数组表示每一位的余数&#xff0c;然后a[0]Aa[0]A&#xff0c;之后a[1]a[0]∗K%Ba[1]a[0]∗K%B&#xff0c;然后如果有q位那么a…

ASP.NET Core Razor页面 vs MVC

作为.NET Core 2.0发行版的一部分&#xff0c;还有一些ASP.NET的更新。其中之一是添加了一个新的Web框架来创建“页面”&#xff0c;而不需要复杂的ASP.NET MVC。新的Razor页面是一个比较简单的MVC框架版本&#xff0c;在某些方面是老的“.aspx” WebForms的演变。 在本文中&a…

Gradle 简单使用

文章目录创建Gradle项目dependencies.gradlegradle.propertiesbuild.gradleGradle配置文件详解dependency-management 插件SpringBootPlugin 插件多模块热部署创建Gradle项目 dependencies.gradle ext.versions [ // 定义所有要使用的版本号springboot: 2.4.1 // Spri…

Nginx可以做什么?看完这篇你就懂了

转载自 Nginx可以做什么&#xff1f;看完这篇你就懂了 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情&#xff0c;由于第三方模块太多所以也介绍不完&#xff0c;当然本文本身也可能介绍的不完整&#xff0c;毕竟只是我个人使用过和了解到过得&#xff0c;欢迎留言…

如何将HBuilder中的项目Push至Gitee中!

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。昨天&#xff0c;给大家介绍了下HBuilder中怎么从gitee中拉取项目至本地&#xff0c;需要的小伙伴们可以点击链接查看&#xff1a;如何从Gitee中拉取项目到HBuilder中&#xff1f;今天&…

jzoj3385-黑魔法之门【并差集】

正题 大意 一个图有n个点&#xff0c;每次增加一条边。每次增加一条边之后统计每个点度数大于0且是偶数的子图个数。 解题思路 首先满足要求的子图至少有一个环&#xff0c;然后我们考虑每加入一个环和别的环的判断情况。每加入一个环的话我们会发现其实就是有若干个环之中选…

PLEASE小组KTV点歌系统简要说明

PLEASE小组KTV项目指导老师&#xff1a;穆老师 班主任&#xff1a;佟老师小组成员&#xff1a;组长&#xff1a;徐祥 副组长&#xff1a;孟祥帅组员&#xff1a;董经纬 组员&#xff1a;孙晓文 周航 组员&#xff1a;徐龙一 张远远制作周期&#xff1a;2021年6月25日…

(选择 冒泡 插入 二分 异或)

文章目录选择排序冒泡排序插入排序二分二分查找某个数是否存在在arr上&#xff0c;找满足大于等于value的最左位置在arr上&#xff0c;找满足小于等于value的最右位置局部最小值异或选择排序 O(n^2) public class Code01_SelectionSort {public static void selectionSort(in…

C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码

源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 没啥好说的.开干吧. 今天的学习内容? 今天的内容比较简单. 就几个弹出框和内置的消息通讯中心. 如图: 正文 1.xamarin中的弹出窗 xamarin帮我们把各个系统的弹出窗做了2个统一的类. 1.…

Java Agent的隔离实现以及卸载时一些坑

转载自 Java Agent的隔离实现以及卸载时一些坑 在《一文带你了解Java Agent》中&#xff0c;让大家了解了Java Agent的来龙去脉&#xff0c;当通过attach方式去动态加载一个Java Agent时&#xff0c;Agent中的类会被加载到业务的虚拟机中&#xff0c;在使用完Agent的之后&am…

2018/7/13-纪中某C组题【jzoj3382,jzoj3383,jzoj3384,jzoj3385】

今天的题目出奇的难&#xff08;好吧是我把时间全砸在第一题上了&#xff09; 今日分数 person分数xjq60xxy40hjq40lrz30lw30hzb20zyc10蒟蒻30 正题 T1&#xff1a;jzoj3382-七夕祭【贪心,中位数】 博客链接&#xff1a;https://blog.csdn.net/mr_wuyongcong/article/detai…

KTV阶段项目告一段落,让我们张开双臂迎接新阶段吧!!

经过两周的周期&#xff0c;KTV项目终于告一段落&#xff0c;今天进行了项目答辩&#xff0c;大家表现的都很棒哦&#xff0c;以下是对KTV项目的一个简要总结。各位老师&#xff0c;各位4班的同学们&#xff0c;以及各位其他班的同学&#xff0c;大家下午好&#xff0c;首先需要…

Orleans稍微复杂的例子—互动

我费力费心的翻译过官方的教程,但是本人英语词汇量不高,可是架不住电子词典啊…只要肯花时间,我这些内容谁都可以做出来.所以这个事例告诉我们一个道理,那就是码农有三好,钱多话少死得早.我也许只有后两好. 当初阿尔法狗在围棋上战胜人类的时候,人工智能一时大热,不管老小,都大…

(链表 栈 队列 递归)

文章目录链表反转链表删除点链表中给定值的结点栈和队列双向链表实现栈和队列数组实现队列获取栈的最小值用两个栈实现一个队列用两个队列实现一个栈递归链表 反转链表 &#xff08;反转单链表 反转双向链表&#xff09; public class Code01_ReverseList {public static cl…