D2. Seating Arrangements (hard version)(贪心+排序)

news2024/10/3 10:39:40

Problem - 1566D2 - Codeforces

 

这是该问题的困难版本。唯一的区别是,在这个版本中,1≤n≤300。

电影院的座位可以表示为有n行和m列的表格。每行的座位都用1到n的整数编号,从左到右连续编号:在第k行,从m(k-1)+1到mk,所有行1≤k≤n。

1 2 ⋯ m-1 m
m+1 m+2 ⋯ 2m-1 2m
2m+1 2m+2 ⋯ 3m-1 3m
⋮ ⋮ ⋱ ⋮ ⋮
m(n-1)+1 m(n-1)+2 ⋯ nm-1 nm
有座位指数的桌子
有nm人想去电影院看一部新电影。他们被编号为从1到nm的整数。你应该给每个人正好一个座位。

众所周知,在这个电影院里,座位指数越低,你就越能看到屏幕上发生的一切,第i个人的视力水平为ai。让我们定义si为座位指数,它将被分配给第i个人。你想把更好的位置给视力水平较低的人,所以对于任何两个人i,j,如果ai<aj,应该满足si<sj。

在你给所有的人提供座位后,他们会开始到他们的座位上。按照从1到N的顺序,每个人都将进入大厅并坐在自己的座位上。为了去他们的位置,这个人将去他们座位的那一排,然后从这一排的第一个座位开始从左到右移动到他们的座位。在移动过程中,有些地方是空的,有些地方则被已经坐下的人占据。这个人的不便之处等于他或她将经过的被占座位的数量。

让我们考虑一个例子:m=5,这个人在第一排有4个座位,第一排的1、3、5号座位已经有人了,2、4号座位是空的。这个人的不便将是2,因为他将经过被占的1号和3号座位。

找到最小的总不便(所有的人的不便之和),这是给所有的人提供位置的可能性(所有的条件都要满足)。

输入
输入由多个测试案例组成。第一行包含一个整数t(1≤t≤100)--测试案例的数量。测试用例的描述如下。

每个测试用例的第一行包含两个整数n和m(1≤n,m≤300)--分别为每行的行数和位数。

每个测试用例的第二行包含n⋅m个整数a1,a2,...,an⋅m(1≤ai≤109),其中ai是第i个人的视力水平。

保证所有测试用例的n⋅m之和不超过105。

输出
为每个测试案例打印一个整数--可以实现的最小总不便。

例子
inputCopy
7
1 2
1 2
3 2
1 1 2 2 3 3
3 3
3 4 4 1 1 1 1 1 2
2 2
1 1 2 1
4 2
50 50 50 50 3 50 50 50
4 2
6 6 6 6 2 2 9 6
2 9
1 3 3 3 3 3 1 1 3 1 3 1 1 3 3 1 1 3
输出拷贝
1
0
4
0
0
0
1
备注
在第一个测试案例中,有一个单一的方法来分配座位:第一个人坐在第一个位置,第二个人--坐在第二个位置。总的不方便是1。

在第二个测试案例中,最佳座位是这样的。


在第三个测试案例中,最佳座位看起来是这样的。


一个单元格中的数字是坐在这个位置上的人的指数。

题解:

如果ai<aj,应该满足si<sj。每个人视力小的位置编号也要小

其次如果视力一样总排时应该把编号小的提前,

为什么?

因为对于所有的大于前面的视力y,无论编号如何肯定是要排到视力小的后面的,为了不影响后面的尽量,让小的往前

对于每一行进行排序时,我们肯定要按照规则排,视力小的一定排在前面,视力一样的,编号大的排在前面,因为肯定是编号小的先坐

然后统计每行的不满意度即可

#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include<cstring>
#include<cmath>
using namespace std;
#define int long long
struct node
{
	int id;
	int x;
}a[100040];
bool cmp(node a,node b)
{
	if(a.x == b.x)
	return a.id < b.id;
	return a.x < b.x;
}

bool cmp1(node a,node b)
{
	if(a.x == b.x)
	return a.id > b.id;
	return a.x < b.x;
}
void solve()
{
	int n,m;
	cin >> n>> m;
	for(int i = 1;i <= n*m;i++)
	{
		cin >> a[i].x;
		a[i].id = i;
	}
	int ans = 0;
	sort(a+1,a+1+n*m,cmp);
	for(int i = 1;i <= n;i ++)
	{
		sort(a+1+(i-1)*m,a+1+i*m,cmp1);
		int l = (i-1)*m + 1,r = i * m;
		for(int j = l;j <= r;j++)
		{
			for(int k = l;k < j;k++)
			{
				ans += a[j].id > a[k].id;
			}
		}		
	}
	cout << ans<<"\n";
	
}
//32 8 32
signed main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);
	int t = 1;
	cin >> t;
    while(t--)
	{
		solve();
	} 
}
//10

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

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

相关文章

前端的视角聊聊如何快速入门Python

对于 NodeJs 开发的小伙伴&#xff0c;使用 node-gyp 将 C 模块转换成 NodeJs 的 addon 插件时会依赖 Python 的安装环境&#xff08;针对使用了 nvm 等版本管理工具的情况&#xff09;。对于前端小伙伴来说&#xff0c;Python 本身确实不是一个必须学习的语言&#xff0c;但也…

提前做好网络安全分析,运维真轻松(一)

背景 某汽车总部已部署NetInside流量分析系统&#xff0c;使用流量分析系统提供实时和历史原始流量。汽车配件电子图册系统是某汽车集团的重要业务系统。本次分析重点针对汽车配件电子图册系统进行预见性分析&#xff0c;以供安全取证、性能分析、网络质量监测以及深层网络分析…

SQL基础——聚合与排序

聚合与排序前言思维导图聚合函数示例表3-1![在这里插入图片描述](https://img-blog.csdnimg.cn/9c286053f87a4ae882bece8128bdcab5.png)计算表中数据的行数 COUNT函数示例代码3.1 计算全部数据的行数执行结果计算NULL之外的数据的行数代码示例3.2 计算NULL之外的数据行数执行结…

【DevOps实战系列】第五章:基于Gitlab/Maven/Jenkins/Docker实战案例详解

个人亲自录制全套DevOps系列实战教程 &#xff1a;手把手教你玩转DevOps全栈技术 从创建Jenkins的job开始 1.gitlab设置&#xff1a; 我们从新建一个jenkins任务开始&#xff0c;建一个自由风格项目&#xff0c;我们暂时只让他能拉取git的代码。 路径&#xff1a;从gitlab上新…

【ML笔记】5、支持向量机(SVM)

支持向量机&#xff08;SVM&#xff09;是一个强大的和通用的ML模型&#xff0c;能够执行分类&#xff0c;回归&#xff0c;甚至异常值检测&#xff0c;特别适合于复杂的中小型数据集。 1、线性SVM分类 我们可以看到&#xff0c;这两个类可以很容易地用一条直线(线性可分)分开…

GAN入门知识

GAN入门知识 结构 正式说 GAN 之前我们先说一下判别式模型和生成式模型。 判别器 判别式模型 判别式模型&#xff0c;即 Discriminative Model&#xff0c;又被称为条件概率模型&#xff0c;它估计的是条件概率分布(conditional distribution)&#xff0c; p(class|context) 。…

图书网上商店

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 1

docker-compose安装部署kafka

文章目录前言一、环境信息二、准备部署1.准备路径2.安装docker-compse&#xff0c;下载镜像3.生成yml文件2.执行部署三、登陆页面前言 记录一下使用docker-compose部署kafka平台的过程 参考&#xff1a;https://blog.csdn.net/QQ83512272/article/details/126368978 一、环境信…

Socket Websocket 客户端和服务端实现

最近在写一个上位机&#xff0c;用到了Websocket&#xff0c;这里就整理一下&#xff0c;顺便把Socket的东西也整理的了&#xff0c;方便以后查阅。 Socket Websocket 客户端和服务端实现Socket客户端和服务端实现Socket客户端Socket服务端实现效果Websocket 客户端和服务端实现…

QT Linux环境搭建——VM虚拟机和Ubuntu的安装

1、从ubuntu官网上下载iso镜像文件&#xff0c;该镜像文件用于安装linux操作系统&#xff0c;以下微官网链接 Enterprise Open Source and Linux | Ubuntu 选择一个最新的稳定版本下载即可&#xff08;好处是&#xff0c;不需要像一些别的网站&#xff0c;必须要注册&#xff…

基于java+springmvc+mybatis+vue+mysql的远程家庭健康监测管理系统小程序

项目介绍 本系统采用java语言开发&#xff0c;后端采用ssm框架&#xff0c;前端采用vue技术&#xff0c;数据库采用mysql进行数据存储。 前台&#xff1a; 登录注册、查看个人信息、留言反馈、查看健康信息、查看百科、社区交流 后台&#xff1a; 首页、个人中心、用户管理、…

陈天老师的Rust培训(2)学习笔记

所有权&#xff1a; Rust中的每一个值都有一个被称为其 所有者&#xff08;owner&#xff09;的变量值在任一时刻有且只有一个所有者。当所有者(变量)离开作用域的时候&#xff0c;这个值将被丢弃。 Copy的类型&#xff1a; 所有整数类型&#xff0c;比如u32。布尔类型所有浮…

本地springboot jar 部署到云服务器linux [安装jdk 安装msyql]

A). 安装jdk 参考博客CentOS 8 安装 JAVA 三种方式(yum / rpm / tar.gz) [rootiZt4ned91xzjstx1s6ftjvZ local]# rpm -qa |grep java [rootiZt4ned91xzjstx1s6ftjvZ local]# rpm -qa |grep jdk [rootiZt4ned91xzjstx1s6ftjvZ local]# rpm -qa |grep jre [rootiZt4ned91xzjstx…

bug:解决java.security.InvalidKeyException: Illegal key size or default parameters

bug:解决java.security.InvalidKeyException: Illegal key size or default parameters 1 复现 今天对接外链需要使用AES加密的时候&#xff0c;对方使用的是AES&#xff1a;AES/ECB/PKCS7Padding&#xff0c;但是在加密过程中&#xff0c;发现报错 报错信息&#xff1a;java.…

Spark Shell 的使用

Spark Shell 的使用 Spark shell 作为一个强大的交互式数据分析工具&#xff0c;提供了一个简单的方式学习 API。它可以使用 Scala&#xff08;在Java 虚拟机上运行现有的Java库的一个很好方式&#xff09;或 Python。 Spark Shell 命令 启动 Spark Shell 的时候我们可以指定…

JavaIO

CPU指令与内核态、用户态 在操作系统中&#xff0c;CPU负责执行指令,这些指令有些来自应用程序&#xff0c;有些是来自底层系统。 有些指令是非常危险的&#xff0c;如清除内存&#xff0c;网络连接等等&#xff0c;如果错误调用的话有可能导致系统崩溃。 因而CPU将指令分为特…

Excel表格的打开密码如何设置和取消?

给Excel表格设置“打开密码”是保护表格的其中一种方法&#xff0c;这样只有输入正确的密码才能打开表格。 那Excel表格的打开密码如何设置和取消呢&#xff1f; 首先&#xff0c;打开Excel表格&#xff0c;点击菜单栏的【文件】选项&#xff0c;然后依次选择【信息】-【保护…

java项目-第175期ssm高校校园点餐系统-java毕业设计

java项目-第175期ssm高校校园点餐系统-java毕业设计 【源码请到下载专栏下载】 今天分享的项目是《ssm高校校园点餐系统》 该项目分为2个角色&#xff0c;管理员、用户和食堂。 用户可以浏览前台,查看菜品&#xff0c;并进行预约和选座&#xff1b; 同时可以跳转到后台查看自己…

基于jsp+mysql+ssm矿场仓储管理系统-计算机毕业设计

项目介绍 本系统采用了BS架构&#xff0c;利用web技术实现了矿场信息的后台管理&#xff0c;针对矿物质的相关信息&#xff0c;销售情况进行管理。是一款后台信息管理系统&#xff0c;具有管理员和员工两个用户权限&#xff0c;系统设计简单&#xff0c;主要是学习资源&#x…

[R语言]正态分布

目录 分布 连续型变量的分布 正态分布 正态分布的推导 正态分布密度曲线 dnorm 正态分布的概率计算 正态分布累积曲线 总体分位数和尾概率 正态分布案例之一 R语言正态分布函数 正态分布相应的概率计算 正态分布的检验 shapiro.test()函数 Kolmogorov-Smirnov连续…