首页 > 其他分享 >[COCI2021-2022#6] Zemljište

[COCI2021-2022#6] Zemljište

时间:2024-09-10 21:13:43浏览次数:1  
标签:COCI2021 return val int sum 矩阵 Zemlji te

[COCI2021-2022#6] Zemljište

题意

给出一个矩阵,一个子矩阵的权值为 \(|m-a|+|m-b|\),\(m\) 为子矩阵数值和,\(a,b\) 为给出的数。

求该矩阵权值最小的子矩阵。

思路

枚举子矩阵上界和下界,左右界使用双指针枚举,令 \(a<b\)。

对于每个左界,不断扩展右界直到子矩阵和大于 \(b\),因为再往右扩展一定不优。

每次扩展时统计答案即可。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 505 + 5;
int r, s, a, b, ans = 1e9;
int v[N][N], sum[N][N];
int val(int x_1, int y_1, int x_2, int y_2) {
	return sum[x_2][y_2] - sum[x_1 - 1][y_2] - sum[x_2][y_1 - 1] + sum[x_1 - 1][y_1 - 1];
}
int calc(int x_1, int y_1, int x_2, int y_2) {
	return abs(a - val(x_1, y_1, x_2, y_2)) + abs(b - val(x_1, y_1, x_2, y_2));
}
void solve() {
	cin >> r >> s >> a >> b;
	if (a > b) swap(a, b);
	for (int i = 1; i <= r; i ++)
		for (int j = 1; j <= s; j ++)
			cin >> v[i][j];
	for (int i = 1; i <= r; i ++)
		for (int j = 1; j <= s; j ++)
			sum[i][j] = sum[i - 1][j] + sum[i][j - 1] + v[i][j] - sum[i - 1][j - 1];
	for (int i = 1; i <= r; i ++) {
		for (int j = i; j <= r; j ++) {
			for (int L = 1, R = 1; L <= s; L ++) {
				R = max(L, R);
				while (R < s && val(i, L, j, R) <= b) 
					ans = min(ans, calc(i, L, j, R)), R ++;
				ans = min(ans, calc(i, L, j, R));
			}
		}
	}
	cout << ans << "\n";
} 
signed main() {
	int T = 1;
//	cin >> T;
	while (T --)
		solve();
	return 0;
}

标签:COCI2021,return,val,int,sum,矩阵,Zemlji,te
From: https://www.cnblogs.com/maniubi/p/18407230

相关文章

  • Chapter 14 计算机网络基本概述
    欢迎大家订阅【Vue2+Vue3】入门到实践专栏,开启你的Vue学习之旅!文章目录前言一、网络的基本概念二、集线器、交换机和路由器三、互连网与互联网四、网络的类型五、互连网的组成1.边缘部分2.核心部分六、网络协议前言计算机网络是现代信息社会的基础,本章详细......
  • Chapter 12 Vue CLI脚手架组件化开发
    欢迎大家订阅【Vue2+Vue3】入门到实践专栏,开启你的Vue学习之旅!文章目录前言一、项目目录结构二、组件化开发1.组件化2.Vue组件的基本结构3.依赖包less&less-loader前言组件化开发是Vue.js的核心理念之一,VueCLI为开发者提供了便捷的工具和结构来实现组......
  • The Teacher's Day gift a future teacher wants
    `#includeincludevoidprintBanner();voidprintHeart();voidprintFlower();intmain(){std::cout<<"\n";printBanner();std::cout<<std::endl;printFlower();std::cout<<std::endl;printHeart();return0;}`点击查看......
  • ECOM 2001 Term Project Description
    ECOM 2001 TermProjectDescriptionDue 30Septemberat 9:00AMAWSTIntroductionThe aim of thisproject is toprepare, evaluate and analyse stockmarket data and torecommend an optimalportfo- lioconsistingof two stocks. Youhavebeen......
  • WPF datagrid datagridtemplatecolumn image mouseenter show the image in big windo
    <DataGridTemplateColumn><DataGridTemplateColumn.CellTemplate><DataTemplate><ImageSource="{BindingImgUrl}"Width="200"Height="500"><behavior:Inter......
  • 【Azure Service Bus】创建 ServiceBus 的Terraform脚本报错GetAuthorizationRule: In
    问题描述在使用Terraform部署ServiceBus时候,遇见了如下报错:Error:ErrormakingReadrequestonAzureServiceBusTopicAuthorizationRule:servicebus.TopicsClient#GetAuthorizationRule:Invalidinput:autorest/validation:validationfailed:parameter=authorization......
  • FIT9137 An Enterprise Network Design
    FIT9137Assignment2SubmissionGuidelinesAssignment2 isworth 25% of theUnit Marks.Deadline:Week-8–Friday, 13th September 2024, 11:55PM (Melbournetime)● Submissionformatanddetails: You must submit exactlytwo files with the ......
  • 初学者指南:掌握 Vue 路由(Router)
    初学者指南:掌握Vue路由(Router)在现代前端开发中,单页面应用(SPA)越来越受欢迎,而Vue.js是构建SPA的热门选择之一。在Vue应用中,路由管理是实现页面导航的关键。本文将带你一步步了解如何在Vue应用中使用路由。什么是路由?在Web应用中,路由是URL到页面内容的映射。......
  • LTE PSS主同步信号PSS搜索阶段频偏估计
    频偏的影响:本期要讲到PSS搜索阶段,整数倍频偏和小数倍频偏的估计方法,整数倍频偏指的是子载波间隔的整数倍比如15k、30k等,小数倍频偏指的是一个子载波间隔以内的。在OFDM通信系统中,频偏是一个比较敏感的词,正常如果频偏估不准会带来一系列的问题,比如OFDM信号的正交性遭到破坏,带来......
  • Digital Marketing Strategy Online Media Campaign
    DigitalMarketingStrategyAssessment2: OnlineMediaCampaignClientOverviewOperatingintherestaurantandbarindustry, SpritzSpizzicheria(2016) utiliseslocallysourcedingredientstodeliveritsconsumerswithqualityItaliancuisinesinacordia......