七夕祭(算法竞赛进阶指南 P29,中位数 + 思维 ?)

算法竞赛进阶指南学习笔记(基础算法篇) 用这个博客记录一下自己学习过程中遇到的问题和心得体会. 学习这本书时用的是oj是acwing,上面有几乎所有书上的题目. 0x01 1.a^b 快速幂模板题 所谓快速幂.是利用了数二进制的特点.后面倍增算法的思想也和这个有异曲同工之妙.二进制有什么特点呢?最大的一个特点就是它的每一位只有1和0,说明在该位上面,这位上的数只有存在和不存在两种可能.也就是说ab可以把它拆成ak1ak2…这里的k1k2... 阅读详情

一.题目链接:

七夕祭

二.题目大意:

中文题不解释.

三.分析:

{

根据移动规则易得:

上下交换两个点,该列中所需摊位个数不变.

左右交换两个点,该行中所需摊位个数不变.

那不妨先上下移动实现 row ,再左右移动 实现 col.

立即推:若 t 为 n 的倍数,则可实现 row;若 t 为 m 的倍数,则可实现 col.

下面只讨论如何实现 row,col 类比即可.

{

        根据题目描述可得,这是要进行 行的部分交换,使得每行的元素个数均相等.

        不过这是个环形,为了简化问题,我们先考察线型的问题.

        {

               即:有一行元素,每个相邻的元素进行部分交换,最终使得每个元素相同.

               这个问题很简单,只需要 "多退少补" 到下一个元素即可.

                例如:设每个元素的个数为 a[i],平均数为 mean.

               那么可由贪心解决

               若 a[1] > mean,则第一个人将 a[1] - mean 个给第二个人.

               若 a[1] < mean,则第一个人从第二个人那里取走 a[1] - mean 个.

               即:使第一个人达到目标的最少交换次数为 |a[1] - mean|.

               同理,对 [2, n] 进行相同操作.

               由于第一步只是[1,2]之间的元素交换,所以 sum[2](前缀和)不变.

                所以第二步所需的交换次数为 |2 * mean - sum[2]|

               到这里我们可以发现,总共的交换次数为  \sum _{i = 1} ^{n} | i \times mean - sum[i] |

               现在我们对这个式子变形

               设 A[i] = a[i] - mean

                    s[i] = \sum _{j = 1} ^{i} A[j]

               则交换次数为 \sum _{i = 1} ^{n} |s[i]|

               我们可以注意到:s[n] == 0 是恒成立的(因为元素总数是不变的).

        }

        现在我们再来讨论环形的情况.

        根据线型,我们知道必定存在一个数 k,使得第 k 行不需要与第 k % n + 1 行进行元素交换.

        把环断开,这样问题就转换为了线型问题.

        即对于一个数 k:

        序列                         前缀和

        A[k + 1]                    s[k + 1] - s[k]

        A[k + 2]                    s[k + 2] - s[k]

        ............                    .....................

        A[n]                         s[n] - s[k]

        A[1]                         s[1] + s[n] - s[k]

        A[2]                         s[2] + s[n] - s[k]

        ............                    .....................

        A[k]                         s[k] + s[n] - s[k]

        又因为 s[n] == 0

        所以:

        序列                         前缀和

        A[k + 1]                    s[k + 1] - s[k]

        A[k + 2]                    s[k + 2] - s[k]

        ............                    .....................

        A[n]                         s[n] - s[k]

        A[1]                         s[1] - s[k]

        A[2]                         s[2] - s[k]

        ............                    .....................

        A[k]                         s[k] - s[k]

        即:求一个数 k,使得  \sum _{i = 1} ^{n} |s[i] - s[k]| 最大.

}

我们把序列 s 排序,即求一个数 k,使得第 k 个位置的点与其他点的距离和最小.

假设第 k 个点左边有 p 个点,右边有 q 个点.

若 k 向右移动一个点,则左边的点距离都加 1,右边的点的距离都减 1,距离和减少了 q - p.

若 k 向左移动一个点,则左边的点距离都减 1,右边的点的距离都加 1,距离和减少了 p - q.

由此可得,k 应选取中位数.

}

四.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <stack>
#include <bitset>
#include <vector>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 1e-8
#define lc k * 2
#define rc k * 2 + 1
#define pi acos(-1.0)
#define ll long long int
using namespace std;

const int M = (int)1e5;
const ll mod = (ll)1e9 + 7;
const int inf = 0x3f3f3f3f;

struct node
{
    int x, y;
} s[M + 5];

int row_cnt[M + 5];
int col_cnt[M + 5];
int row_sum[M + 5];
int col_sum[M + 5];

int main()
{
    int n, m, t;
    scanf("%d %d %d", &n, &m, &t);
    memset(row_cnt, 0, sizeof(row_cnt));
    memset(col_cnt, 0, sizeof(col_cnt));
    for(int i = 1; i <= t; ++i)
    {
        scanf("%d %d", &s[i].x, &s[i].y);
        row_cnt[s[i].x]++;
        col_cnt[s[i].y]++;
    }
    bool row_flag = !(t % n);
    bool col_flag = !(t % m);
    if(!row_flag && !col_flag)
        printf("impossible\n");
    else
    {
        ll row_change = 0;
        ll col_change = 0;
        if(row_flag)
        {
            int mean = t / n;
            for(int i = 1; i <= n; ++i)
            {
                row_cnt[i] -= mean;
                row_sum[i] = row_sum[i - 1] + row_cnt[i];
            }
            sort(row_sum + 1, row_sum + n + 1);
            int pos = n / 2 + 1;
            for(int i = 1; i <= n; ++i)
                row_change += (ll)abs(row_sum[i] - row_sum[pos]);
        }
        if(col_flag)
        {
            int mean = t / m;
            for(int i = 1; i <= m; ++i)
            {
                col_cnt[i] -= mean;
                col_sum[i] = col_sum[i - 1] + col_cnt[i];
            }
            sort(col_sum + 1, col_sum + m + 1);
            int pos = m / 2 + 1;
            for(int i = 1; i <= m; ++i)
                col_change += (ll)abs(col_sum[i] - col_sum[pos]);
        }
        if(row_flag && !col_flag)
            printf("row %lld\n", row_change);
        else if(!row_flag && col_flag)
            printf("column %lld\n", col_change);
        else if(row_flag && col_flag)
            printf("both %lld\n", row_change + col_change);
    }
    return 0;
}

 

【计算机视觉】pyrealsense2:Intel RealSense 深度相机的 Python 接口实战指南 pyrealsense2:Intel RealSense 深度相机的 Python 接口实战 阅读详情

相关推荐

基于STM32的多普勒雷达测速

基于多普勒雷达传感器,以STM32单片机为主控芯片,根据不同模块检测距离的不同,使用不同多普勒雷达传感器实现对远近距离车辆行驶速度及方向的测量。 1、基础知识 无线电探测和测距,是用无线电(电磁波)方法发现目标并测定其空间位置的装置。随着雷达技术的发展,现代雷达不仅可以对目标进行定位,还可以测量目标的速度、对目标进行成像甚至测量目标的大小和材料特性。所有利用雷达波来检测物体速度的原理,其理论基础皆源自于“多普勒效应”,...

weixin_52801934的博客 6315

《算法竞赛进阶指南》七夕祭

《算法竞赛进阶指南》七夕祭 对我来说是一道难题,因为这道题涉及到的模型我都不是很熟悉,而且思维链比较长(一定是我太蒟了)。 1.题意 一个 n*m 矩阵中有 T 个点,判断通过移动相邻位置后,是否能使每行(每列)拥有的点数都相等,并输出最小移动步数。在此题中,第1和n也看作是相邻的。 2.初步分析 若交换的两个位置中均有点,那么这次交换是没有任何意义的。所以,此题中的“交换位置”就是“移动点”。既然如此,那么“点数整除n,m"与”存在一种方案使得每一列/每一行之间点数相同“互为充要条件。下面仅讨论“点数整

zixiangzhan的博客 242

【爬虫】Python实现爬取淘宝商品信息(超详细)

项目基于Python的第三方库Selenium模拟浏览器运行、PyQuery解析和操作HTML文档,获取淘宝平台中某类商品的详细信息(商品标题、价格、销量、商铺名称、地区、商品详情页链接、商铺链接等),并基于第三方库openpyxl建立、存储于Excel表格中。# 全局变量count = 1 # 写入Excel商品计数# 启动ChromeDriver服务# 关闭自动测试状态显示 // 会导致浏览器报:请停用开发者模式# 把chrome设为selenium驱动的浏览器代理;# 窗口最大化。

qq_46315152的博客 4万+

基本算法- 七夕祭

题目描述 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。于是TYVJ今年举办了一次线下七夕祭。Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩。 TYVJ七夕祭和11区的夏祭的形式很像。矩形的祭典会场由N排M列共计N×M个摊点组成。虽然摊点种类繁多,不过cl只对其中的一部分摊点感兴趣,比如章鱼烧、苹果糖、棉花糖、射的屋……什么的。Vani预先联系了七夕祭...

weixin_30599769的博客 242

用PyCharm+Scrapy打造你的第一个爬虫:从安装到实战(附完整代码)

本文详细介绍了如何使用PyCharm和Scrapy框架从零开始构建高效网络爬虫。通过环境配置、项目创建、核心爬虫逻辑编写到数据处理与存储的完整流程,帮助Python开发者快速掌握爬虫开发技巧,并附有实战代码示例。特别适合想要学习Scrapy框架和提升爬虫技能的开发者。

weixin_29038345的博客 868

SRA数据库

简介 序列读取存档(sequence Read Archive,SRA)数据是可通过多个云提供商和NCBI服务器获得的,它是最大的可公开获得的高通量测序数据存储库。 SRA接受来自生活各个部门以及宏基因组学和环境调查的数据。 SRA存储原始测序数据和比对信息,以提高可重复性并通过数据分析促进新发现。 NCBI网站储存二代测序原始数据的数据库 SRA官网 从Entrez搜索结果中下载SRA序列 例如查找SRA Entrez中BALB / c小鼠淋巴结组织的RNA-Seq记录 获取搜索结果 SRA se

qq_44520665的博客 5909

2018.11.3 Nescafe18 T1 七夕祭

题目 背景 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。于是 TYVJ 今年举办了一次线下七夕祭。Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕,于是他们决定去 TYVJ七夕祭游玩。 题目描述 TYVJ 七夕祭和 11 区的夏祭的形式很像。矩形的祭典会场由 N 排 M 列共计 N×M 个摊点组成。虽然摊点种类繁多,不过 cl 只对其中的一部分摊点感兴趣,比如章鱼烧、苹果糖...

K423x 269

Halcon Camera-calibration 相关算子(一)

Halcon Camera-calibration 相关算子介绍

qq_44744164的博客 1366

[算法竞赛进阶指南] 七夕祭 (贪心+前缀和+中位数+排序)

题目 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。 于是TYVJ今年举办了一次线下七夕祭。 Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩。 TYVJ七夕祭和11区的夏祭的形式很像。 矩形的祭典会场由N排M列共计N×M个摊点组成。 虽然摊点种类繁多,不过cl只对其中的一部分摊点感兴趣,比如章鱼烧、苹果糖、棉花糖、射的屋……什么的。 Vani预先联系了七夕...

eternityer 572

滑块逆向及流程分析

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

pyzzd的博客 8007

【ComfyUI】SDXL + 单LoRA 房屋平面图渲染装修

本文介绍了一种基于ComfyUI的室内平面设计图自动生成效果图的工作流。该流程通过导入房屋平面图,结合SDXL室内设计模型与北欧风格LoRA模块,快速生成多房间效果展示。工作流包含图像输入、文本处理、模型加载和图像生成等环节,支持风格化渲染和细节补充,适用于建筑设计、家装展示、房地产营销等场景。核心采用SDXL通用室内设计模型和北欧极简LoRA,通过节点衔接实现自动化批量生成,能在短时间内将平面方案转化为逼真的三维效果图。该技术可提升设计呈现效率,辅助客户决策,并应用于教学研究领域。

Mr数据杨 3650

[DP] CH0502:[算法竞赛进阶指南]七夕祭(0x00「基本算法」例题)

CH0502 七夕祭( 0x00「基本算法」例题):http://contest-hunter.org:83/contest/0x00%E3%80%8C%E5%9F%BA%E6%9C%AC%E7%AE%97%E6%B3%95%E3%80%8D%E4%BE%8B%E9%A2%98/0502%20%E4%B8%83%E5%A4%95%E7%A5%AD 这题是bzoj1045糖果传递 的二维版本? ...

kkkGIGi_qtt 661

YOLOv11模型改进-模块-引入空间池化模块StripPooling 解决遮挡、小目标

本文介绍了一种新的空间池化策略,称为,用于场景解析。结构:包括两个平行路径,分别进行水平和垂直方向的条带池化,然后通过1D卷积层进行特征调整。:结合了条带池化和传统的空间池化,分别用于捕捉长距离和短距离的依赖关系。作用捕捉长距离依赖:通过长条形的池化窗口,有效捕捉分布离散的区域之间的关系。避免不相关信息干扰:窄条形的池化窗口有助于捕捉局部上下文,防止不相关区域干扰标签预测。提高场景解析性能:在多个基准数据集上,证明了这种方法能够显著提升场景解析的效果。

qq_64693987的博客 4204

代数部分小结

代数部分小结

cj1064789374的博客 344

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[BZOJ3032]七夕祭

[BZOJ3032]七夕祭 试题描述 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。于是TYVJ今年举办了一次线下七夕祭。Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩。  TYVJ七夕祭和11区的夏祭的形式很像。矩形的祭典会场由N排M列共计N×M个摊点组成。虽然摊点种类繁多,不过cl只对其中的一部分摊点感兴趣,比如章鱼烧、苹果糖、棉花糖、射的屋……什...

weixin_30677475的博客 407

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

bzoj3032 七夕祭题解

题面 TYVJ七夕祭和11区的夏祭的形式很像。矩形的祭典会场由N排M列共计N×M个摊点组成。虽然摊点种类繁多,不过cl只对其中的一部分摊点感兴趣,比如章鱼烧、苹果糖、棉花糖、射的屋……什么的。Vani预先联系了七夕祭的负责人zhq,希望能够通过恰当地布置会场,使得各行中cl感兴趣的摊点数一样多,并且各列中cl感兴趣的摊点数也一样多。 不过zhq告诉Vani,摊点已经随意布置完毕了,如果想...

aqg41577的博客 288

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

牛客 七夕祭 题解

原题链接:https://ac.nowcoder.com/acm/contest/1001/C 这道题思路很难,弄了几个小时,看了几篇题解才大概明白(可能还没完全明白),可能是我太菜了吧… 思路: 第一步:先判断每行(列)能不能刚好完全评分摊位,如果可以,先求出每行(列)应该有多少摊位,在利用前缀和算出每行(列)和他之前的摊位想要达到平均值需要多少步操作(用前缀和数组进行记录),记录之后对前缀数组进行排序(因为这个排序,《算法指南》把这题放到排序章节就离谱) 第二步:此时行(列)相当于一个环形(因为假设任意

qiaodxs的博客 243

【算法进阶0x00】七夕祭

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

xyc1719的博客 543

【BSOJ1724】【bzoj3032】TYVJ P1924 【NOIP2013模拟】七夕祭

1724 -- 【模拟试题】七夕祭 Description 【题目背景】 七夕节因牛郎织女的传说而被扣上了 「情人节」的帽子。于是TYVJ 今年举办了一次线下七夕祭。Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕,于是他们决定去 TYVJ七夕祭游玩。 【题目描述】 TYVJ 七夕祭和11区的夏祭的形式很像。矩形的祭典会场由N 排 M列共计N×M个摊点组成。虽然摊点种类繁多,

moep0的博客 1860

《算法竞赛进阶指南》0x05 T3 七夕祭

题目描述 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。 于是 TYVJ 今年举办了一次线下七夕祭。 Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕,于是他们决定去 TYVJ 七夕祭游玩。 TYVJ 七夕祭和 11 区的夏祭的形式很像。 矩形的祭典会场由 NNN 排 MMM 列共计 N×MN×MN×M 个摊点组成。 虽然摊点种类繁多,不过 cl 只对其中的一部分摊点感兴趣,比如章鱼烧、苹果糖、棉花糖、射的屋……什么的。 Vani 预先联系了七夕祭的负责人 zhq,希望能够通过恰当地布置会场,使

weixin_55355427的博客 416

七夕祭(bzoj3032权限题,同codevs2485)

ProblemN行M列,共N*M个摊位,其中有T个是有价值的(即喜爱的)。每次可以交换相邻两个摊位(每一行或每一列最后一个位置也算相邻)。现在想要各行中有价值的摊位数相同,各列中有价值的摊位数也要相同。求最少的交换次数。Solution首先,同一列中的交换只会影响行,同一行中的交换只会影响列。所以我们可以分开考虑行与列这两个问题。我做题时有一个疑问——空间结构会不会影响交换呢?如果两列中在同一行均...

呆头呆脑没有烦恼 507

七夕祭【模拟】

题目大意: 有一个会场由NNN排MMM列共计N×MN×MN×M个摊点组成。但是小LLL只对其中的一部分摊点感兴趣。他预先联系了会场的负责人,希望能够通过恰当地布置会场,使得各行中他感兴趣的摊点数一样多,并且各列中他感兴趣的摊点数也一样多。 但是摊点已经随意布置完毕了,如果想满足小LLL的要求,唯一的调整方式就是交换两个相邻的摊点。两个摊点相邻,当且仅当他们处在同一行或者同一列的相邻位置上,每一...

stoorz 951

【NOIP2013模拟】七夕祭

Sample Input4 32 5 4 32 1 33 2 44 2 4Sample Output-12Data ConstraintHint第一份订单满足后,4天剩余教室分数分别为0,3,2,3. 第二份订单要求第二天到第四天每天提供三个教室,而第三天剩余的教室数为二,因此无法满足。分配停止通知第二个申请人修改订单。10% -> 1<=n,m<=1030% -> 1<=n,m<=100070%

HownoneHe的博客 1516

[BZOJ3032]七夕祭(中位数)

传送门 竟然是权限题!!! 目前正在学习的lydrainbowcat著《算法竞赛进阶指南》里面的题目,里面的讲解非常好。强推这本书,很棒! 题意和题目都灰常棒!好评! 非常有意思! 以下题解出自《算法竞赛进阶指南》(有改动因为我不想抄写。。和版权也有关): 我们发现: 交换左右两个相邻的摊点只会改变某两列中cl感兴趣的摊点数而对这一行没有影响。 相同的,交换上下两个相邻的摊点只...

私は Mocha!! 736

【codevs2485】七夕祭(贪心,环形纸牌均分)

solution 1、首先行列独立互相不影响,可以单独统计。于是就变成了一个环形纸牌均分问题。 2、纸牌均分问题每行答案是∑ni=1|i∗T/n−G[i]|∑i=1n|i∗T/n−G[i]|,其中T为总牌数,G[i]是a[i]的前缀和,a[i]为每个人的牌数。(这里考虑让每个人一开始手中的牌数都减去T/nT/n(为什么要减,后面就有好处了),答案显然不变(数学...

weixin_30670925的博客 256

七夕祭 (前缀和,排序)

七夕祭 (前缀和,排序) 题意是中文的就不重复了。。 思路: 列之间的交换并不会影响行的结果,相似的,行之间的交换并不会影响列的结果 首先我们进行可行性判断 即t个点可以被n行或者m列所均分 可以抽象为将t个点均分给n或m个人(类似题目[均分纸牌][https://ac.nowcoder.com/acm/problem/16739]) 以下以分给n个人为例 第i个人需要的纸牌数目为A[i]=row[i]−(t/n)A[i]=row[i]-(t/n)A[i]=row[i]−(t/n),为正则为需要纸牌,从i+

Charles Liu 419
上一篇: Cinema (CodeForces - 670C ,离散化入门)
下一篇: Running Median( POJ - 3784,对顶堆动态维护中位数)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值