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

牛客周赛 Round 104(小红的矩阵不动点/小红的不动点权值)

小红的矩阵不动点

我们不难发现当i==j时,i或j任意一方增大都起不动点都是a[i][j]==z(z==i==j)。

因为数据最大为min(i,j)及500,所以我们可以用数组b[z][j]表示此位置min应为z,实际为j的个数

先计算不交换时 不动点个数 记为ans
则答案要么是ans+2 要么是ans+1 要么是ans
当且仅当两个数交换之后(b[z][j]>0&&b[j][z]>0时) 分别成为新的不动点时 答案为ans+2
当且仅当两个数交换之后 (i!=j&&b[i][j] > 0 && b[j][j] < (m + n-1 - 2 * (j - 1))只有一个成为新的不动点时 答案为ans+1,m + n-1 - 2 * (j - 1)表示该值最多有多少个不动点
否则 答案为ans.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
int n, m;
int a[502][502], b[502][502];
int main() {ios::sync_with_stdio(false);        // 禁用同步cin.tie(nullptr);                   // 解除cin与cout绑定cin >> n >> m;int ans = 0;int min_p = min(n, m);for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> a[i][j];}}for (int z = 1; z <= min_p; z++) {for (int j = z; j <= m; j++) {if (a[z][j] <= min_p) {b[z][a[z][j]]++;}}for (int i = z + 1; i <= n; i++) {if (a[i][z] <= min_p) {b[z][a[i][z]]++;}}}for (int i = 1; i <= min_p; i++) {int j;for ( j = 1; j <i; j++) {if (b[i][j] >0 && b[j][i] >0) {ans = 2;break;}}if (j <i) {break;}}if (ans == 0) {for (int i = 1; i <= min_p; i++) {int j;for (j = 1; j <= min_p; j++) {if (i!=j&&b[i][j] > 0 && b[j][j] < (m + n-1 - 2 * (j - 1))) {ans = 1;break;}}if (j < min_p) {break;}}}int sum = 0;for (int i = 1; i <= min_p; i++) {sum += b[i][i];}cout << sum+ans << endl;return 0;
}

小红的不动点权值

我们可以发现当i为不动点时,1-i-1个数都必须在区间内,所以我们根据这个找到最小区间的左右边界,i为不动点的区间就为  (long long)(n - r+1)* l

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
typedef pair<int, int> pii;
int n;
pii a[300005];
int main() {ios::sync_with_stdio(false);        // 禁用同步cin.tie(nullptr);                   // 解除cin与cout绑定cin >> n;for (int i = 0; i < n; i++) {cin >> a[i].first;a[i].second = i + 1;}int l, r;sort(a, a + n);ll ans = 0;for (int i = 0; i < n; i++) {if (i == 0) {l = a[i].second;r = a[i].second;}else {if (a[i].second < l) {l = a[i].second;}if (a[i].second > r) {r = a[i].second;}}ans += (ll)(n - r+1)* l;}cout << ans << endl;return 0;
}

http://www.dtcms.com/a/335503.html

相关文章:

  • 【Netty核心解密】Channel与ChannelHandlerContext:网络编程的双子星
  • 适用监测农作物长势和病虫害的高光谱/多光谱相机有哪些?
  • Mac(四)自定义按键工具 Hammerspoon 的安装和使用
  • Baumer高防护相机如何通过YoloV8深度学习模型实现行人跌倒的检测识别(C#代码UI界面版)
  • Redis入门1
  • 【Leetcode hot 100】189.轮转数组
  • 【C2000】C2000例程使用介绍
  • 24. 什么是不可变对象,好处是什么
  • Flink作业执行的第一步:DataFlow graph的构建
  • 一周学会Matplotlib3 Python 数据可视化-多子图及布局实现
  • 【传奇开心果系列】Flet框架实现的家庭记账本示例自定义模板
  • Python可视化工具-Bokeh:动态显示数据
  • 【Golang】:错误处理
  • 10 SQL进阶-SQL优化(8.15)
  • 【Luogu】每日一题——Day21. P3556 [POI 2013] MOR-Tales of seafaring (图论)
  • 中国大学MOOC--C语言程序设计第十周字符串(下)
  • openEuler等Linux系统中如何复制移动硬盘的数据
  • HTTPS 配置与动态 Web 内容部署指南
  • Hadoop入门
  • SpringCloud 06 服务容错 Sentinel
  • NY270NY273美光固态闪存NY277NY287
  • 黎阳之光:以动态感知与 AI 深度赋能,引领电力智慧化转型新革命
  • mysql||事务相关知识
  • nertctl使用了解
  • Node.js导入MongoDB具体操作
  • IoT/HCIP实验-5/基于WIFI的智慧农业实验(LwM2M/CoAP+PSK+ESP8266 连接到 IoTDA)
  • python study notes[4]
  • Vue深入组件:Props 详解3
  • 【adb端口5555】烽火hg680-gy_烽火hg680-gc安卓9线刷烧录包 解决用一段时间就提示升级的问题
  • 回溯剪枝的 “减法艺术”:化解超时危机的 “救命稻草”(一)