码迷,mamicode.com
首页 > 其他好文 > 详细

P4924 [1007]魔法少女小Scarlet

时间:2020-10-05 22:36:11      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:void   lse   space   using   car   for   --   ios   name   

这题硬模拟就行了,不要搞什么花里胡哨的递归啥的

#include<iostream>
#include<vector>

using namespace std;

const int N = 510;

int n, m;
int g[N][N];
int b[N];

void dfs(int x, int y, int v, int p){
    if(v == 0) return;
    
    if(p == 0){
        for(int i = y - v, k = 1; i <= y + v - 1; k ++, i ++) b[k] = g[x - v][i];
        for(int i = x - v, k = 1; i <= x + v - 1; k ++, i ++){
            int t = g[i][y + v];
            g[i][y + v] = b[k];
            b[k] = t;
        }
        for(int i = y + v, k = 1; i >= y - v + 1; k ++, i --){
            int t = g[x + v][i];
            g[x + v][i] = b[k];
            b[k] = t;
        }
        for(int i = x + v, k = 1; i >= x - v + 1; k ++, i --){
            int t = g[i][y - v];
            g[i][y - v] = b[k];
            b[k] = t;
        }
        for(int i = y - v, k = 1; i <= y + v - 1; k ++, i ++) g[x - v][i] = b[k];
    }else{
        for(int i = y + v - 1, k = 1; i >= y - v; i --, k ++) b[k] = g[x - v][i];
        for(int i = x - v + 1, k = 1; i <= x + v; i ++, k ++){
            int t = g[i][y - v];
            g[i][y - v] = b[k];
            b[k] = t;
        }
        for(int i = y - v + 1, k = 1; i <= y + v; i ++, k ++){
            int t = g[x + v][i];
            g[x + v][i] = b[k];
            b[k] = t;
        }
        for(int i = x + v - 1, k = 1; i >= x - v; i --, k ++){
            int t = g[i][y + v];
            g[i][y + v] = b[k];
            b[k] = t;
        }
        for(int i = y + v - 1, k = 1; i >= y - v; i --, k ++) g[x - v][i] = b[k];
    }
    
    dfs(x, y, v - 1, p);
    
}

int main(){
    cin >> n >> m;
    
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= n; j ++)
            g[i][j] = (i - 1) * n + j;
            
    while(m --){
        int x, y, r, z;
        cin >> x >> y >> r >> z;
        
        dfs(x, y, r, z);
    }
    
    for(int i = 1; i <= n; i ++){
        for(int j = 1; j <= n; j ++)
            cout << g[i][j] << ‘ ‘;
        cout << endl;
    }
    
    return 0;
}

P4924 [1007]魔法少女小Scarlet

标签:void   lse   space   using   car   for   --   ios   name   

原文地址:https://www.cnblogs.com/tomori/p/13771269.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!