https://remmina.github.io/BZPRO/JudgeOnline/3032.html

题目

背景

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

题目描述

TYVJ 七夕祭和11 区的夏祭的形式很像。矩形的祭典会场由N 排M 列共计N×M 个摊点组成。虽然摊点种类繁多,不过cl 只对其中的一部分摊点感兴趣,比如章鱼烧、苹果糖、棉花糖、射的屋……什么的。Vani 预先联系了七夕祭的负责人zhq,希望能够通过恰当地布置会场,使得各行中cl 感兴趣的摊点数一样多,并且各列中cl 感兴趣的摊点数也一样多。不过zhq 告诉Vani,摊点已经布置完毕了,唯一的调整方式就是交换两个相邻的摊点。两个摊点相邻,当且仅当他们处在同一行或者同一列的相邻位置上。由于zhq 率领的TYVJ 开发小组成功地扭曲了空间,每一行或每一列的第一个位置和最后一个位置也算作相邻。现在Vani 想知道他的两个要求最多能满足多少个。在此前提下,至少需要交换多少次摊点。

输入格式

第一行包含三个整数N 和M 和T。T 表示cl 对多少个摊点感兴趣。
接下来T 行,每行两个整数x, y,表示cl 对处在第x 行第y 列的摊点感兴趣。

输出格式

首先输出一个字符串。如果能满足Vani 的全部两个要求,输出both;如果通过调整只能使得各行中cl 感兴趣的摊点数一样多,输出row;如果只能使各列中cl 感兴趣的摊点数一样多,输出column;如果均不能满足,输出impossible。
如果输出的字符串不是impossible, 接下来输出最小交换次数,与字符串之间用一个空格隔开。

样例输入1

2 3 4
1 3
2 1
2 2
2 3

样例输出1

row 1

样例输入2

3 3 3
1 3
2 2
2 3

样例输出2

both 2

数据范围与约定

对于100% 的数据,1≤N, M≤100000,0≤T≤min(NM, 100000),1≤x≤N,1≤y≤M。

题解

答案是分别统计每行和每列感兴趣的摊位数,然后执行两次均分纸牌(也如“酒交易”),还需要证明只需要考虑数量,不需要关心位置

首先考虑列

1 1 1
  1 1
    1

必要性:如果能均分,那么关心的摊位的数量一定为列数的倍数

充分性:

知道和为列数的倍数了,因此我们只需要搬动一些摊位,并且不考虑先后顺序的情况下一定能均分= =

如果做不到,说明这个位置仅经过左右移动放不下需要的摊位。但如果这样,说明这几行都是满的(否则摊位的数量不是列数的倍数),符合题目的要求,所以一定能做到。

因此和为列数的倍数等价于能经过左右搬动式每列摊位数相等。

同理可证行的情况

由于移动不改变关心的摊位数量,所以两次移动是独立的。

由于是环形,需要考虑每处打开的链的情况,容易推出公式= =

AC代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<iomanip> #define REP(r,x,y) for(register int r=(x); r<(y); r++)
#define REPE(r,x,y) for(register int r=(x); r<=(y); r++)
#ifdef sahdsg
#define DBG(...) printf(__VA_ARGS__)
#else
#define DBG(...) (void)0
#endif using namespace std;
typedef long long LL;
typedef pair<LL, LL> pll;
typedef pair<int, int> pii; char ch; int f;
template <class T>
inline void read(T &x) {
x=0; f=1; do ch=getchar(); while(!isdigit(ch) && ch!='-');
if(ch=='-') ch=getchar(),f=-1; while(isdigit(ch)) {x=x*10+ch-'0';
ch=getchar();} x*=f;
}
int n,m,t;
#define MAXN 100007
LL h[MAXN], l[MAXN];
int main() {
read(n); read(m); read(t);
memset(h,0,sizeof h), memset(l, 0, sizeof l);
REP(i,0,t) {
int a,b; read(a); read(b);
h[a-1]++, l[b-1]++;
}
bool ish=!(t%n), isl=!(t%m); if(ish&&isl) printf("both"); else if(ish) printf("row"); else if(isl) printf("column"); else {puts("impossible"); return 0;}
LL ans=0;
if(ish) {
h[0]-=t/n;
REP(i,1,n) {
h[i]=h[i]-t/n+h[i-1];
}
sort(h,h+n);
REP(i,0,n/2) {
ans+=abs(h[n-i-1]-h[i]);
}
}
if(isl) {
l[0]-=t/m;
REP(i,1,m) {
l[i]=l[i]-t/m+l[i-1];
}
sort(l,l+m);
REP(i,0,m/2) {
ans+=abs(l[m-i-1]-l[i]);
}
}
printf(" %lld\n", ans);
return 0;
}

BZOJ3032 七夕祭的更多相关文章

  1. bzoj3032 七夕祭题解

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

  2. BZOJ3032 七夕祭[中位数]

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

  3. <BZOJ3032>七夕祭

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

  4. [Poetize II]七夕祭

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

  5. 2018.11.3 Nescafe18 T1 七夕祭

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

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

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

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

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

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

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

  9. 【NOIP2013模拟】七夕祭

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

随机推荐

  1. entity framework 实现按照距离排序

    在做项目时,经常会遇到“离我最近”这种需求.顾名思义,它需要根据用户的经纬度和事物的经纬度计算距离,然后进行排序,最后分页(当然这些操作要在数据库中进行,否则就变成假分页了). 我们通常可以用sql语 ...

  2. .NET Core和.NET Standard有什么不同

        近日,微软发布了.NET Core 2.0,但是开发人员中间仍然存在一些疑惑,就是.NET Core..NET Standard.Xamarin和.NET Framework有什么不同. .N ...

  3. 对HTML5标签的认识(三)

    这篇随笔继续来认识HTML标签.这次随笔主要是对<table>标签的认识和最近我学习到的一些标签来和大家分享. 一.<table>标签 <table>标签的作用主要 ...

  4. dubbo 2.7.0 中缺乏 <dubbo:annotation /> 的解决方案

    一.背景  从 dubbo 2.6.5 升级到 2.7.0,突然发现好多地方不能用了,dubbo:annotation 直接报红,原先的 @Service 和 @Reference 中直接报了过时,源 ...

  5. jQuery内容过滤选择器与子元素过滤选择器用法实例分析

    jQuery选择器内容过滤 一.:contains(text) 选择器::contains(text)描述:匹配包含给定文本的元素返回值:元素集合 示例: ? 1 2 $("div.mini ...

  6. 为什么不能在 body 标签的前面的 script 标签中定义 JS 全局变量?

    <!DOCTYPE html> <!-- 为什么不能在 body 标签的前面的 script 标签中定义 JS 全局变量? 在全局环境下的代码就是在页面加载阶段从上到下一边加载一边执 ...

  7. 我喜欢的vs code快捷键for mac

    mac上的快捷键,尽量是像我用vs studio上靠近. cmd+K+S: 显示快捷键列 cmd+shift+p: 系统配置命令行 cmd+p:项目中文件列表,选择文件 cmd+shift+o:当前文 ...

  8. SQL Server数据库————模糊查询和聚合函数

    ***********模糊查询*********/ 关键字: like (!!!!字符串类型) in (,,)  匹配()内的某个具体值(括号里可以写多个值) between... and.. 在某两 ...

  9. js坚持不懈之13:JavaScript查找HTML元素的方法

    1. 通过 id 查找 HTML 元素 <!DOCTYPE html> <html> <body> <p id = "intro"> ...

  10. JAVA EE获取浏览器和操作系统信息

    一.原理说明:  1. 浏览器访问服务端时,Http请求头上会带上客户端一些信息,可通过"user-agent"获取. //java获取方法如下,其他语言也有自己获取方法 Stri ...