洛谷 P4924 [1007]魔法少女小Scarlets

刚开始做的时候自己也手动模拟了一遍,但是结果却错了,后来看了一下题解,学会了一个更加巧妙的解法;

题目链接:https://www.luogu.com.cn/problem/P4924

 

 手动模拟一遍。

题解+注释:

复制代码
#include <iostream>
using namespace std;
const int N = 510;
int q[N][N], t[N][N];  // t是临时数组 

void spin(int x, int y, int r)
{
    for(int i = x - r; i <= x + r; i++)
    for(int j = y - r; j <= y + r; j++)
    t[i][j]  = q[i][j];   // 先把要转换的那个矩阵复制到t上 
    
    int xx = x + r, yy = y - r;   // 这个很巧妙 
    
    for(int i = x - r; i <= x + r; i++)
    {
        for(int j = y - r; j <= y + r; j++)
        {
            q[i][j] = t[xx][yy];   // 然后根据规律 把t每一行的数据赋给q的每一列(要对应) 
            xx--;
        }
        xx = x + r, yy++;  // 模拟 
    }
}
void spin_(int x, int y, int r)  // 同理 
{
    for(int i = x - r; i <= x + r; i++)
    for(int j = y - r; j <= y + r; j++)
    t[i][j] = q[i][j];
    int xx = x - r, yy = y + r;
    for(int i = x - r; i <= x + r; i++)
    {
        for(int j = y - r; j <= y + r; j++)
        {
            q[i][j] = t[xx][yy];
            xx++;
        }
        yy--, xx = x - r;
    }
}
int main()
{
    int n, m, k = 0;
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        q[i][j] = ++k;
    }
    while(m--)
    {
        int x, y, r, z;
        cin >> x >> y >> r >> z;
        if(z == 0)
            spin(x, y, r);
        else
            spin_(x, y, r);
    }
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        cout << q[i][j] << ' ';
        cout << endl;
    }
    return 0;
}
复制代码

 

posted @   飘向远方丶  阅读(82)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示