zoukankan      html  css  js  c++  java
  • CodeForces 669C

    链接:http://codeforces.com/problemset/problem/669/C

    http://www.cnblogs.com/Ash-ly/p/5443155.html

    题意:

      给你一个N*M的矩阵,有三种操作:

      1 r 代表把第r行整体左移一位,第一个到最后一个位置.

      2 l  代表把第l列整体上移一位,第一个到最底下的位置.

      3 x y v 代表此刻第 x 行第 y 列的值为 v.

      给你一系列的操作,让你给出满足要求的原始矩阵,如果有多个答案,其中任意一个都可以.

    思路:

      既然一个矩阵 Q 经过一系列的操作 p1, p2, p3, p4, ..., pn 变成了 Z,那么 Z 经过 pn, ..., p4, p3, p2, p1 也可以恢复到 Q,那么这道题就解决了,只不过对于命令 1 和 2 需要把方向反过来,对于命令 3,直接对相应的位置进行赋值就好了.

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int MAXN = 100;
     5 const int MAXQ = 10000;
     6 int arr[MAXN + 7][MAXN + 7];
     7 int n, m, q;
     8 
     9 struct Order
    10 {
    11     int ord;
    12     int aa;
    13     int bb;
    14     int cc;
    15 }od[MAXQ + 7];
    16 
    17 void righmv(int low)
    18 {
    19     for(int i = m + 1; i >= 2; --i)
    20         arr[low][i] = arr[low][i - 1];
    21     arr[low][1] = arr[low][m + 1];
    22 }
    23 
    24 void downmv(int line)
    25 {
    26     for(int i = n + 1; i >= 2; --i)
    27         arr[i][line] = arr[i - 1][line];
    28     arr[1][line] = arr[n + 1][line];
    29 }
    30 
    31 int main()
    32 {
    33 //     freopen("input.txt", "r", stdin);
    34     scanf("%d%d%d", &n, &m, &q);
    35     memset(&od, 0, sizeof(Order));
    36     for(int i = 0; i < q; i++)
    37     {
    38         scanf("%d", &od[i].ord);
    39         if(od[i].ord != 3) scanf("%d", &od[i].aa);
    40         else    scanf("%d%d%d", &od[i].aa, &od[i].bb, &od[i].cc);
    41     }
    42     for(int i = q - 1; i >= 0; --i)
    43     {
    44         if(od[i].ord == 1)
    45             righmv(od[i].aa);
    46         else if(od[i].ord == 2)
    47             downmv(od[i].aa);
    48         else
    49             arr[od[i].aa][od[i].bb] = od[i].cc;
    50     }
    51     for(int i = 1; i <= n; i++)
    52     {
    53         for(int j = 1; j <= m; j++)
    54             printf(j == 1 ? "%d":" %d", arr[i][j]);
    55         printf("
    ");
    56     }
    57     return 0;
    58 }

     

  • 相关阅读:
    Area--->AreaRegistrationContext.MapRoute
    Area--->AreaRegister.RegisterAllArea()与Area区域的解析
    Area的使用
    ViewData、ViewBag、TempData、Session的区别与联系
    设计模式---装饰模式(转自可均可可博客)
    设计模式---桥接模式(转自可均可可博客)
    设计模式---适配器模式(转自可均可可博客)
    设计模式---原型模式(转自可均可可博客)
    设计模式---简单工厂、工厂方法、抽象工厂
    ASP.NET MVC Controller激活系统详解1
  • 原文地址:https://www.cnblogs.com/Ash-ly/p/5443155.html
Copyright © 2011-2022 走看看