zoukankan      html  css  js  c++  java
  • P4924 [1007]魔法少女小Scarlet

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

    #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;
    }
    
  • 相关阅读:
    C# 规格说明书
    C#学习笔记----复习笔记
    C#学习笔记-stream,win8.1开发小记
    C#学习笔记-Win8.1 store app winform开发小记
    C#学习笔记:linq和xml
    C#第六周--关于正则表达式应用,delegates关键字
    C#第六课---struct,interface
    C#第五课--继承和多态
    开发了一款小程序
    「CSS Warning 2」icon 的做法
  • 原文地址:https://www.cnblogs.com/tomori/p/13771269.html
Copyright © 2011-2022 走看看