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

牛客周赛 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.xdnf.cn/news/18066.html

相关文章:

  • 【AI智能体】Dify 搭建发票识别助手操作实战详解
  • 深入理解QFlags:Qt中的位标志管理工具
  • 【URP】[法线贴图]为什么主要是蓝色的?
  • PowerPoint和WPS演示让多个对象通过动画同时出现
  • LeetCode 刷题【44. 通配符匹配】
  • 【杂谈】-以质代量:谷歌主动学习范式重构AI训练逻辑
  • 朝花夕拾(四) --------python中的os库全指南
  • 【k8s】Kubernetes核心概念与架构详解
  • 向量数据库
  • Qt | 四种方式实现多线程导出数据功能
  • Python爬虫实战:研究optimesh库,构建Github网格数据采集系统
  • 好看的个人导航系统多模板带后台
  • OpenAI 发布了 GPT-5,有哪些新特性值得关注?国内怎么使用GPT5?
  • 乐观锁和悲观锁
  • Opencv 形态学与梯度运算
  • C++ 标准模板库 (^^ゞ 致敬 STL 创始人 Alexander Stepanov
  • React 第七十节 Router中matchRoutes的使用详解及注意事项
  • 【完整源码+数据集+部署教程】胃部病变检测系统源码和数据集:改进yolo11-LSKNet
  • wgs-84坐标到直角坐标系
  • Git 命令指南:从 0 到熟练、从常用到“几乎全集”(含常见报错与解决)建议收藏!!!
  • 大上墨水屏显示器Paperlike253 Mac 特别版 使用体会
  • Git登录配置的详细方法
  • uniapp中uni.showToast和 uni.showLoading同时使用时出现提示中断冲突问题。
  • java设计模式之迪米特法则使用场景分析
  • 佳文赏读 || (CVPR 2025新突破) Robobrain:机器人操作从抽象到具体的统一大脑模型(A Unified Brain Model)
  • 魔搭api功能优化
  • 栈与队列:数据结构中的双生子
  • 【P14 3-6 】OpenCV Python——视频加载、摄像头调用、视频基本信息获取(宽、高、帧率、总帧数),视频保存在指定位置
  • 在职老D渗透日记day18:sqli-labs靶场通关(第26关)get报错注入 过滤or和and基础上又过滤了空格和注释符 ‘闭合 手动注入
  • qt vs2019编译QXlsx