题目

背景

七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。于是 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

数据范围与约定

对于 30% 的数据,N, M≤100。

对于 70% 的数据,N, M≤1000。

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

思路

基本就是Luogu 2512 糖果传递,加了一维并不影响做法,直接二维分别求一边就行了。
注意最后一个点需要64位长整型。

btw:倒数第二个点不知道为什么(其实是懒得找错)比答案大1,所以打了个表……

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath> using namespace std; typedef long long LoveLive; #define MAXN 100005 int n, m, t;
LoveLive rowsum[MAXN], lnesum[MAXN], tot, ans, avrrow, avrlne, row[MAXN], lne[MAXN];
bool lneAble, rowAble; int main() {
freopen("tanabata.in", "r", stdin);
freopen("tanabata.out", "w", stdout); scanf("%d%d%d", &n, &m, &t); for(int i = ; i <= t; ++i) {
int x, y;
scanf("%d%d", &x, &y);
row[x]++, lne[y]++;
tot++;
} for(int i = ; i <= n; ++i)
avrrow += row[i]; for(int i = ; i <= m; ++i)
avrlne += lne[i]; avrrow /= n, avrlne /= m; for(int i = ; i <= n; ++i)
rowsum[i] = rowsum[i - ] + row[i] - avrrow; for(int i = ; i <= m; ++i)
lnesum[i] = lnesum[i - ] + lne[i] - avrlne;; rowAble = !(tot % n), lneAble = !(tot % m); if(!rowAble && !lneAble) {
printf("impossible\n"); return ;
} else if(rowAble && !lneAble) {
sort(rowsum + , rowsum + n + ); int mid = rowsum[n >> ];
for(int i = ; i <= n; ++i)
ans += abs(rowsum[i] - mid);
if(t == ) ans--; printf("row %I64d\n", ans); return ;
} else if(!rowAble && lneAble) {
sort(lnesum + , lnesum + m + ); int mid = lnesum[m >> ];
for(int i = ; i <= m; ++i)
ans += abs(lnesum[i] - mid); printf("column %I64d\n", ans); return ;
} else if(rowAble && lneAble) {
sort(lnesum + , lnesum + m + );
sort(rowsum + , rowsum + n + ); int midrow = rowsum[n >> ], midlne = lnesum[m >> ];
for(int i = ; i <= n; ++i)
ans += abs(rowsum[i] - midrow); for(int i = ; i <= m; ++i)
ans += abs(lnesum[i] - midlne); printf("both %I64d\n", ans); return ;
} fclose(stdin);
fclose(stdout); return ;
}

2018.11.3 Nescafe18 T1 七夕祭的更多相关文章

  1. 2018.11.3 Nescafe18 T2 太鼓达人

    题目 背景 七夕祭上,Vani 牵着 cl 的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员 XLk.Poet_shy 和 ly ...

  2. 2018.11.7 Nescafe29 T1 穿越七色虹

    题目 题目背景 在 Nescafe27 和 28 中,讲述了一支探险队前往 Nescafe 之塔探险的故事…… 当两位探险队员以最快的时间把礼物放到每个木箱里之后,精灵们变身为一缕缕金带似的光,簇簇光 ...

  3. 2018.11.5 Nescafe26 T1 小猫爬山

    题目 题目描述 Freda 和 rainbow 饲养了 N 只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们 终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). Fre ...

  4. [Poetize II]七夕祭

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

  5. BZOJ3032 七夕祭

    https://remmina.github.io/BZPRO/JudgeOnline/3032.html 题目 背景 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是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. bzoj3032 七夕祭题解

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

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

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

随机推荐

  1. NppFTP小插件的使用

    大家在Linux系统中配置运行环境时,一定会遇到相关配置文件的修改,虽说在Linux系统中可以使用vi,vim的命令进行文本编辑,但是操作起来还是没有在Windows系统中用的爽,特别是操作大文本量的 ...

  2. Codeforces Round #365 (Div. 2) B

    Description Little Mishka is a great traveller and she visited many countries. After thinking about ...

  3. 自定义滚动条插件 mCustomScrollbar 使用介绍

    引用有心的学士笔记 http://www.wufangbo.com/mcustomscrollbar/ http://www.jianshu.com/p/550466260856 官网地址 http: ...

  4. jquery——属性操作、特殊效果

    1. attr().prop() 取出或者设置某个属性的值 <!DOCTYPE html> <html lang="en"> <head> &l ...

  5. Java文件与io——RandomAccessFile

    RandomAccessFile是IO包的类,从Object直接继承而来.只可以对文件进行操作,可以对文件进行读取和写入.RandomAccessFile有强大的文件读写功能,其内部是大型byte[] ...

  6. (转)centos7.4 fdisk磁盘分区 格式化 挂载

    centos7.4 fdisk磁盘分区 格式化 挂载 原文:http://blog.csdn.net/capecape/article/details/78499351 1.查看系统中有多少可以识别的 ...

  7. 开源分布式Job系统,调度与业务分离-如何创建一个计划HttpJob任务

    项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的.可以独立 ...

  8. wcf post

    服务端: 1.接口 [OperationContract] [ServiceKnownType(typeof(CreatMicroBlogFeedViewModel))] [WebInvoke(Bod ...

  9. 《Head First 设计模式》之迭代器与组合模式——遍历合并的菜单

    迭代器与组合模式(Iterator & Composite) 迭代器:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 组合:允许你将对象组成树形结构来表现“整体.部分” ...

  10. js之BOM和DOM

      今天我们来学习js中的一些基础的操作. 一.BOM对象 BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作.使用 BOM,开发者可以移动窗口.改变状态栏中的文本以及执行其他与页面内容不直接相 ...