Files
python/TangDou/LuoGuBook/第8章模拟与高精度/P4924.md
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

1.3 KiB
Raw Blame History

P4924 [1007]魔法少女小Scarlet

1、初始化数组的代码

 int cnt = 0; //计数器
 for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++)
          a[i][j] = ++cnt;

.... 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 15 17 18 ....

2、%02d的格式控制

 for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++)
        printf("%02d ", res[i][j]); 
        printf("\n");
    }

3、矩阵的旋转

我们模拟原位置(i,j)在第一象限,i>0,j>0 逆时针90度,到达的位置是: (-j,i) 顺时针90度,到达的位置是:(j,-i) 180度,到达的位置:(-i,-j)

想方法背下来:

(1)1,3象限,i,j位置不变。 2,4象限,i,j对调

(2)1象限是正的,3象限全是负的 2象限x是负的,y是正的 4象限x是正的,y是负的

4、矩阵的遍历

  //逆时针
  for (int i = -r; i <= r; i++)
        for (int j = -r; j <= r; j++) 
            f[x - j][y + i] = res[x + i][y + j];
  //顺时针
  for (int i = -r; i <= r; i++)
        for (int j = -r; j <= r; j++) 
            f[x + j][y - i] = res[x + i][y + j];

5、临时的矩阵变量

防止出现自行覆盖的问题,采用的办法是做一个数组的拷贝,复制品。

memcpy(res, f, sizeof f);