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;
    }
    
  • 相关阅读:
    源码学习-出差有感
    《java数据结构与算法》系列之“快速排序"
    新征途
    命运总是喜欢开玩笑
    《java数据结构与算法》系列之“简单排序"-冒泡,选择,插入
    秒杀9种排序算法(JavaScript版)
    《进击的巨人》
    Noip2001 提高组 T3
    Noip2011 提高组 Day1 T1 铺地毯 + Day2 T1 计算系数
    Noip2012 提高组 Day1 T1 Vigenère 密码
  • 原文地址:https://www.cnblogs.com/tomori/p/13771269.html
Copyright © 2011-2022 走看看