首页 > 其他分享 >Luogu P4924 [1007] 魔法少女小Scarlet

Luogu P4924 [1007] 魔法少女小Scarlet

时间:2024-01-20 22:11:23浏览次数:30  
标签:carlet Scarlet int Luogu 魔法 leq P4924 505

[1007] 魔法少女小Scarlet

\(\color{cyan}link\)

题目描述

Scarlet 最近学会了一个数组魔法,她会在 \(n\times n\) 二维数组上将一个奇数阶方阵按照顺时针或者逆时针旋转 \(90^\circ\)。

首先,Scarlet 会把 \(1\) 到 \(n^2\) 的正整数按照从左往右,从上至下的顺序填入初始的二维数组中,然后她会施放一些简易的魔法。

Scarlet 既不会什么分块特技,也不会什么 Splay 套 Splay,她现在提供给你她的魔法执行顺序,想让你来告诉她魔法按次执行完毕后的二维数组。

输入格式

第一行两个整数 \(n,m\),表示方阵大小和魔法施放次数。

接下来 \(m\) 行,每行 \(4\) 个整数 \(x,y,r,z\),表示在这次魔法中,Scarlet 会把以第 \(x\) 行第 \(y\) 列为中心的 \(2r+1\) 阶矩阵按照某种时针方向旋转,其中 \(z=0\) 表示顺时针,\(z=1\) 表示逆时针。

输出格式

输出 \(n\) 行,每行 \(n\) 个用空格隔开的数,表示最终所得的矩阵

样例 #1

样例输入 #1

5 4
2 2 1 0
3 3 1 1
4 4 1 0
3 3 2 1

样例输出 #1

5 10 3 18 15
4 19 8 17 20
1 14 23 24 25
6 9 2 7 22
11 12 13 16 21

提示

对于50%的数据,满足 \(r=1\)

对于100%的数据 \(1\leq n,m\leq500\),满足 \(1\leq x-r\leq x+r\leq n,1\leq y-r\leq y+r\leq n\)。

思路

由题意模拟。旋转矩阵点\((x,y)\)顺时针旋转到\((y,-x)\),逆时针到\((-y,x)\)。

代码实现

#include<bits/stdc++.h>
using namespace std;
int a[505][505],b[505][505];
int main()
{
	ios::sync_with_stdio(false);
	int n,m,cnt=0;
	cin>>n>>m;
	a[1][1]=1;
	for(int i=1;i<=n;i++)
	{
		if(i!=1) a[i][1]=a[i-1][1]+n;
		for(int j=1;j<=n;j++)
		{
			if(j!=1) a[i][j]=a[i][j-1]+1;
			b[i][j]=a[i][j];
		}
	}
	for(int k=1;k<=m;k++)
	{
		int x,y,r,z;
		cin>>x>>y>>r>>z;
		if(z==0)
		{
			for(int i=-r;i<=r;i++)
			{
				for(int j=-r;j<=r;j++)
				{ 	
					b[x+j][y-i]=a[x+i][y+j];
				}
			}
		}
		if(z==1)
		{
			for(int i=-r;i<=r;i++)
			{
				for(int j=-r;j<=r;j++)
				{
					b[x-j][y+i]=a[x+i][y+j];
				}
			}
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				a[i][j]=b[i][j];
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

标签:carlet,Scarlet,int,Luogu,魔法,leq,P4924,505
From: https://www.cnblogs.com/j1hx-oi/p/17977212

相关文章

  • Luogu P1563 [NOIP2016 提高组] 玩具谜题
    [NOIP2016提高组]玩具谜题\(link\)题目背景NOIP2016提高组D1T1题目描述小南有一套可爱的玩具小人,它们各有不同的职业。有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图:这时singer告诉小南一个谜题:“......
  • Luogu P1042 [NOIP2003 普及组] 乒乓球
    [NOIP2003普及组]乒乓球\(link\)题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中\(11\)分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图......
  • 洛谷题单指南-模拟和高精度-P4924 [1007] 魔法少女小Scarlet
    原题链接:https://www.luogu.com.cn/problem/P4924题意解读:根据题意,通过模拟法,枚举每一个要旋转的矩阵,执行旋转操作即可,关键点在于如何进行矩阵旋转。设定矩阵inta[][],临时矩阵intt[][]用于保存旋转后的矩阵,矩阵长度为len。先考虑要旋转的区域左上角是a[0][0]的情况,区域内每......
  • 玩玩luogu算法题——第1期
    昨天已经把所有大作业写完了,所以今天就想去做一些有趣的事情...今天做的题都不是特别难,除了最后一题(写了大概1000多行Markdown,结果能Accepted的代码居然只有十几行?!)目标:希望暑假的时候每天都能更新一点算法题的随笔出来,加油~P1000超级玛丽游戏(一个非常入门的题目,作用是用来快速......
  • [Luogu] P1058 [NOIP2008 普及组] 立体图
    P1058[NOIP2008普及组]立体图模拟赛时候要是做出来这题就能拿饮料了:(题目传送门思路先打个输出长方体的函数:(其中\((x,y)\)表示该长方体的左上角)voiddraw(intx,inty){c[x][y+2]='+';c[x][y+6]='+';c[x+2][y]='+';c[x+2][y+4]='+';c[x+5][y]='+';c[x+5]......
  • luogu1972题解
    还是先写被卡的做法吧。节点的区间用了现用现计算卡常过了。被卡了一上午,难过。话说有人说我码风有点抽象。思路主席树做法。a[i]是贝壳序列。先求出nxt,即与a[i]相同的下一个a[j]的下标j。用p114514[i]记了值为\(i\)的数的下标,循环到序列第\(j\)个数的时候,先......
  • luogu P9753题解
    题意描述有一个字符串,请你求出有多少个字串可以经过若干次,使它变成空串其中每次操作可以从字符串中删除两个相邻的相同字符,操作后剩余字符串会拼接在一起。##思路1可以枚举左端点,再枚举右端点,一边枚举一边判断是否合法时间复杂度$O(n^2)$空间复杂度$O(n)$##思......
  • Luogu-P4654-[CEOI2017] Mousetrap
    前言模拟赛之后被胁迫上去讲这题,没怎么准备,然后就在几个省的OIer面前当小丑。。倒是把我自己讲得很明白,但感觉对其他人不是很负责任,就来赎罪一下。。更好的阅读体验。题意题目链接。分析以\(t\)为根,我们的目的是让老鼠走到根的操作数最小。观察老鼠的动向,显然老鼠......
  • 【luogu帖】CSP-J 2023 模拟赛 01 赛时答疑帖
    赛时禁止用户与他人交流比赛相关内容,禁止在答疑帖发其他无关内容。欢迎大家参与CSP-J2023模拟赛01。这里是本场比赛的答疑帖。我向各位参赛者及谷友们的支持表示感谢。请不要在赛前在本帖中发布过多灌水相关言论,赛时禁止在本帖中发布灌水相关言论。如果对题面有不理解建议......
  • 【luogu题解】U388218 数数
    数数题目描述给定n个不超过1.5×10⁹的自然数。求这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。输入格式输入的第1行是整数n,表示自然数的个数。第2行到第n+1行每行一个自然数。输出格式输出文件包含m行(m为n个自然数中不相同数的个......