【题目链接】

https://www.lydsy.com/JudgeOnline/problem.php?id=3032

【算法】

交换左右两个相邻格子的摊点,不会改变这一行的摊点个数

交换上下两个相邻格子的摊点,不会改变这一列的摊点个数

因此,题目中所要求的两个问题是独立的,可以分别计算,以第一问 : 每列摊点个数相等,进行讨论 :

我们将每列中的初始摊点个数记为Ai,如果感兴趣的摊点总数不能被M整除,则无解,否则,等价于一个“环形均分纸牌”的问题,

如果不允许“环形传递”,那么最少移动步数为 sigma( | Si | ),Si为Ai - T / M的前缀和

如果允许,仔细思考后会发现,一定有一种最优解的方案,使得环上两个人不进行传递,考虑将环断开 :

假设断开位置为k,那么断开后,每个人的纸牌个数和前缀和分别为 :

Ak+1 Sk+1 - Sk

Ak+2 Sk+2 - Sk

...

Am Sm - Sk

A1 S1 + Sm - Sk

...

Ak Sk + Sm - Sk

因为Sm = 0,所以,前缀和数组与一般情况的差别就是每个位置都减了Sk

所以若断开位置为k,最少交换次数为 : sigma( | Si - Sk| ) , 当Sk取前缀和数组S的中位数时,这个式子的值最小,也就是说,我们将S数组从小到大排序,取中位数Sk就是最优解

那么,这道题就迎刃而解了!

【代码】

#include<bits/stdc++.h>
using namespace std;
#define MAXN 100010 struct pos
{
int x,y;
} a[MAXN]; int i,N,M,T;
long long ans;
long long s[MAXN]; inline void solve1()
{
int i;
memset(s,,sizeof(s));
for (i = ; i <= T; i++) s[a[i].y]++;
for (i = ; i <= M; i++) s[i] -= T / M;
for (i = ; i <= M; i++) s[i] += s[i-];
sort(s+,s+M+);
for (i = ; i <= M; i++) ans += abs(s[i] - s[(M+)>>]);
}
inline void solve2()
{
int i;
memset(s,,sizeof(s));
for (i = ; i <= T; i++) s[a[i].x]++;
for (i = ; i <= N; i++) s[i] -= T / N;
for (i = ; i <= N; i++) s[i] += s[i-];
sort(s+,s+N+);
for (i = ; i <= N; i++) ans += abs(s[i] - s[(N+)>>]);
}
int main()
{ scanf("%d%d%d",&N,&M,&T);
for (i = ; i <= T; i++) scanf("%d%d",&a[i].x,&a[i].y);
if (T % N != && T % M != )
{
printf("impossible");
return ;
}
if (T % M == && T % N != )
{
printf("column ");
solve1();
} else if (T % M != && T % N == )
{
printf("row ");
solve2();
} else
{
printf("both ");
solve1();
solve2();
}
printf("%lld\n",ans); return ; }

【BZOJ 3032】 七夕祭的更多相关文章

  1. BZOJ3032 七夕祭

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

  2. [Poetize II]七夕祭

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

  3. 2018.11.3 Nescafe18 T1 七夕祭

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

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

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

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

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

  6. bzoj3032 七夕祭题解

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

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

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

  8. 【NOIP2013模拟】七夕祭

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

  9. AcWing 105. 七夕祭

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

随机推荐

  1. JavaScipt30(第一个案例)(主要知识点:键盘事件以及transitionend)

    今天得到一个github练习项目,是30个原生js写成的小例子,麻雀虽小五脏俱全,现在记录一下第一个. 第一个是键盘按键时页面上对应的键高亮,同时播放音频,松开后不再高亮. 我自己实现了一下,然后查看 ...

  2. Linux系统安装,组成及开关机

    Linux系统安装,组成及开关机 系统安装 swap分区用于实现虚拟内存,文件系统类型是swap. /分区用于存放包括系统程序和用户数据在内的所有数据,文件系统类型是ext4. 系统组成 Linux内 ...

  3. JPA API与注解

    一.JPA API Persistence 类:用于获取 EntityManagerFactory 实例,该类含有静态方法 createEntityManagerFactory. //persiste ...

  4. 【2018百度之星初赛(A)】1002 度度熊学队列

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6375 Knowledge Point: STL - map:https://www.cnblogs.c ...

  5. Vijos P1334 NASA的食物计划

    解法 二维费用01背包问题 解法就是先枚举物品再枚举条件这里两个条件所以要枚举两个for 代码 #include <bits/stdc++.h> using namespace std; ...

  6. 高德地图将字符串地址转为经纬度的一个demo

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...

  7. 1.Linux标准IO编程

    1.1Linux系统调用和用户编程接口 1.1.1系统调用 用户程序向操作系统提出请求的接口.不同的系统提供的系统调用接口各不相同. 继承UNIX系统调用中最基本和最有用的部分. 调用按照功能分:进程 ...

  8. 洛谷 4768 LOJ 2718「NOI2018」归程

    [题解] 本题有多种做法,例如可持久化并查集.kruskal重构树等. kruskal重构树的做法是这样的:先把边按照海拔h从大到小的顺序排序,然后跑kruskal建立海拔的最大生成树,顺便建krus ...

  9. [POJ3162]Walking Race(DP + 单调队列)

    传送门 题意:一棵n个节点的树.wc爱跑步,跑n天,第i天从第i个节点开始跑步,每次跑到距第i个节点最远的那个节点(产生了n个距离),现在要在这n个距离里取连续的若干天,使得这些天里最大距离和最小距离 ...

  10. validate针对checkbox、radio、select标签的验证

    jQuery.validate 是jquery的一个插件,用来辅助开发者在客户端方便快捷的实现表单验证,最终达到提高用户体验的目的. 示例代码 <form id="formLogin& ...