当前位置: 首页 > article >正文

Educational Codeforces Round 80 D. Minimax Problem(二分,状态压缩)

题目链接

Educational Codeforces Round 80 D. Minimax Problem

思路

看到最小值最大我们很容易想到二分,看到 m m m最大为 8 8 8我们很容易想到状态压缩

我们使用二分答案,考虑如何去check。

在check函数里面,我们将原矩阵中大于等于 m i d mid mid的值视为 1 1 1,小于 m i d mid mid的值视为 0 0 0。按照每一行进行二进制状压,因为 2 m 2^{m} 2m最大为 256 256 256,因此我们直接使用来记录每一行状压的结果。

暴力枚举两种状态,如果这两种状态都出现过且 o r or or起来为 2 m − 1 2^{m}-1 2m1就满足条件。

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;
const int N = 3e5 + 5, M = 10;
const int mod = 998244353;
const int inf = 0x3f3f3f3f3f3f3f3f;

int n, m;
int a[N][M], st[(1ll << 9)];
int qmi(int a, int b)
{
	int res = 1;
	while (b)
	{
		if (b & 1) res = res * a;
		b >>= 1;
		a = a * a;
	}
	return res;
}
bool check(int x, int &tx, int &ty)
{
	memset(st, 0, sizeof st);
	for (int i = 1; i <= n; i++)
	{
		int res = 0;
		for (int j = 1; j <= m; j++)
		{
			res = res * 2 + (a[i][j] >= x);
		}
		st[res] = i;
	}
	for (int i = 0; i <= qmi(2, m) - 1; i++)
	{
		for (int j = 0; j <= qmi(2, m) - 1; j++)
		{
			if (st[i] && st[j] && (i | j) == qmi(2, m) - 1)
			{
				tx = st[i], ty = st[j];
				return true;
			}
		}
	}
	return false;
}
void solve()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			cin >> a[i][j];
		}
	}
	int low = 0, high = 1e9;
	int tx = 1, ty = 1;
	while (low < high)
	{
		int mid = low + high + 1 >> 1;
		if (check(mid, tx, ty))
		{
			low = mid;
		}
		else
		{
			high = mid - 1;
		}
	}
	cout << tx << " " << ty << endl;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	int test = 1;
	// cin >> test;
	for (int i = 1; i <= test; i++)
	{
		solve();
	}
	return 0;
}

http://www.kler.cn/news/357727.html

相关文章:

  • Java程序设计:spring boot(2)
  • 海康威视被曝裁员千人
  • PyTorch深度学习入门汇总
  • ufw 工具介绍
  • SpringBoot之RedisTemplate基本配置
  • 86.【C语言】数据结构之链表的总体概述
  • 【ESP32-IDFV5.3.1开发】带SSL的MQTT-demo连接教程
  • XML 编辑器:功能、选择与使用技巧
  • kubernetes之Helm包管理器
  • 基于springboot的画师约稿系统的设计与实现
  • mysql 的存储引擎各自的优缺点
  • 01_MVCC(多版本并发机制)
  • Leetcode 3327. Check if DFS Strings Are Palindromes
  • 2024.09.28校招 实习 内推 面经
  • Spring Boot优化大创项目风险评估流程
  • HarmonyOS 开发知识总结
  • Discuz | 起尔开发 传奇开服表游戏公益服发布论坛网站插件
  • 记一次 Flink mongoDB CDC 到Kafka遇到的问题
  • 2011年国赛高教杯数学建模A题城市表层土壤重金属污染分析解题全过程文档及程序
  • Spring Boot视频网站:构建可扩展的视频服务平台