给一个优化策略
查看原帖
给一个优化策略
922019
xiaoniu142857楼主2024/12/8 16:03

其实这题可以原地旋转卡常的,不用辅助数组……

#include <iostream>
#include <cstdio>
using namespace std;
int a[500][500];
int main()
{
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int n,m,x,y,r,z,t;
    int bx,by,w;
    cin>>n>>m;
    for(int i=0,k=1;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            a[i][j]=k++;
        }
    }
    for(int i=0;i<m;i++)
    {
        cin>>x>>y>>r>>z;
        x--,y--;
        bx=x-r,by=y-r,w=r<<1;
        //printf("bx:%d by:%d w:%d\n",bx,by,w);
        if(!z)
        {
            for(int j=0;j<r;j++)
            {
                for(int k=0;k<=r;k++)
                {
                    t=a[j+bx][k+by];
                    a[j+bx][k+by]=a[w-k+bx][j+by];
                    a[w-k+bx][j+by]=a[w-j+bx][w-k+by];
                    a[w-j+bx][w-k+by]=a[k+bx][w-j+by];
                    a[k+bx][w-j+by]=t;
                    //printf("(%d,%d) (%d,%d) (%d,%d) (%d,%d)\n",j+bx,k+by,w-k+by,j+bx,w-j+bx,w-k+by,k+by,w-j+bx);
                }
            }
        }
        else
        {
            for(int j=0;j<r;j++)
            {
                for(int k=0;k<=r;k++)
                {
                    t=a[j+bx][k+by];
                    a[j+bx][k+by]=a[k+bx][w-j+by];
                    a[k+bx][w-j+by]=a[w-j+bx][w-k+by];
                    a[w-j+bx][w-k+by]=a[w-k+bx][j+by];
                    a[w-k+bx][j+by]=t;
                    //printf("(%d,%d) (%d,%d) (%d,%d) (%d,%d)\n",j,k,n-k-1,j,n-j-1,n-k-1,k,n-j-1);
                }
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<a[i][j]<<' ';
        }
        cout<<'\n';
    }
	return 0;
}

350 ms → 136 ms
2.38 MB → 1.39 MB
妙哉!

2024/12/8 16:03
加载中...