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

每日OJ题_牛客_dd爱旋转_模拟_C++_Java

目录

牛客_dd爱旋转_模拟

题目解析

C++代码

Java代码


牛客_dd爱旋转_模拟

dd爱旋转

输入描述:

第一行一个数n(1≤n≤1000),表示矩阵大小
接下来n行,每行n个数,描述矩阵,其中数字范围为[1,2000]
一下来一行一个数q(1≤q≤100000),表示询问次数
接下来q行,每行一个数x(x=1或x=2),描述每次询问

输出描述:

n行,每行n个数,描述操作后的矩阵


题目解析

  • 代数法分析:
    • 对于每一种变化,我们可以用代数的方法将其表示出来
      • 第一种变化:a[i][j] --> a[n - i + 1][n - j + 1]
      • 第二种变化:a[i][j] --> a[n - i + 1][j]
    • 最有意思的在于我们如果尝试对翻转的再翻转或者镜像的再镜像,其 i,j 的位置是会复原的(废话)
      • 于是我们知道 x --> n - x + 1 这个变化是自反的(通过两次这样的变化其值又会变回 x )
  • 所以最后的解法:考虑使得 i,j 变成 n - x + 1 形式的操作次数,若发生偶数次则当作无事发生,否则就进行相对应的变换。

C++代码

#include <iostream>
#include <vector>
using namespace std;

int n = 0;
void func1(vector<vector<int>>& arr) // 列镜像
{
	for (int j = 0; j < n / 2; ++j)
	{
		for (int i = 0; i < n; ++i)
		{
			swap(arr[i][j], arr[i][n - j - 1]);
		}
	}
}
void func2(vector<vector<int>>& arr) // 行镜像
{
	auto tmp = arr;
	int cnt = 1;
	for (int i = 0; i < n / 2; ++i)
	{
		for (int j = 0; j < n; ++j)
		{
			swap(arr[i][j], arr[n - i - 1][j]);
		}
	}
}
int main()
{
	cin >> n;
	vector<vector<int>> arr(n, vector<int>(n));
	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j < n; ++j)
		{
			cin >> arr[i][j];
		}
	}
	int q = 0;
	cin >> q;
	int cnt1 = 0, cnt2 = 0;
	while (q--)
	{
		int x = 0;
		cin >> x;
		if (x == 1) // 顺时针180度,列镜像?
		{
			++cnt1, ++cnt2;
			// func1(arr);
			// func2(arr);
		}
		else // 行镜像
		{
			++cnt2;
			// func2(arr);
		}
	}
	cnt1 %= 2, cnt2 %= 2;
	if (cnt1)
		func1(arr);
	if (cnt2)
		func2(arr);
	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j < n; ++j)
		{
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}

Java代码

import java.util.*;
public class Solution
{
    public int LastRemaining_Solution (int n, int m)
    {
        int f = 0;
        for(int i = 2; i <= n; i++) f = (f + m) % i;
        return f;
    }
}

http://www.kler.cn/a/401156.html

相关文章:

  • MySQL时间字段TIMESTAMP和DATETIME
  • 【会话文本nlp】对话文本解析库pyconverse使用教程版本报错、模型下载等问题解决超参数调试
  • Web3浪潮下的区块链应用:从理论到实践的全面解析
  • ([LeetCode仓颉解题报告] 661. 图片平滑器
  • 【UGUI】背包的交互01(道具信息跟随鼠标+道具信息面板显示)
  • 高斯数据库Postgresql死锁和锁表解决方法
  • 数据结构 【单链表练习】
  • RPA真的是人工智能吗?
  • 二刷代码随想录第七天
  • git commit
  • 如何将几个音频合成一个音频?非常简单的几种合成方法
  • Pandas-5:数据分析与统计
  • MongoDB的常用命令(数据库操作、集合操作、文档操作)
  • CentOS 7.9 搭建本地Yum源
  • 汽车科技前沿:Spring Boot资讯快车道
  • 深入解析【C++多态】:探索面向对象编程中的动态绑定与行为多样性和多态的核心概念与应用实践
  • ubuntu24.04网卡配置
  • 大连理工大学概率上机作业免费下载
  • 嵌入式串口通信
  • 《网络风险及网络安全》培训总结
  • html5复习一
  • ospf实验
  • 【MYSQL】什么是关系型数据库与非关系型数据库?
  • Spring Boot图书馆管理系统:疫情中的管理利器
  • 【重生之我要苦学C语言】C语言内存函数
  • 面向服务的软件工程——面向过程的系统分析:流程挖掘(week10)