【题解】洛谷P4924[【LGR-053】洛谷10月月赛I]A.[1007]魔法少女小Scarlet 模拟

题目链接
【题解】洛谷P4924[【LGR-053】洛谷10月月赛I]A.[1007]魔法少女小Scarlet 模拟_第1张图片
【题解】洛谷P4924[【LGR-053】洛谷10月月赛I]A.[1007]魔法少女小Scarlet 模拟_第2张图片


我从来没想过,T1能写炸……qwq
换了种思路写,大概意思就是把中心点与当前点做差得到的差值进行旋转。
{ b [ x − ( y − j ) ] [ y + ( x − i ) ] = a [ i ] [ j ] z = 0 b [ x + ( y − j ) ] [ y − ( x − i ) ] = a [ i ] [ j ] z = 1 \begin{cases}b[x-(y-j)][y+(x-i)]=a[i][j]\quad z=0\\b[x+(y-j)][y-(x-i)]=a[i][j]\quad z=1\end{cases} {b[x(yj)][y+(xi)]=a[i][j]z=0b[x+(yj)][y(xi)]=a[i][j]z=1
画画图就能做了(喂到我嘴边的分我都没要QAQ)

#include
int n,m,id,a[510][510],b[510][510];
int main()
{
	//freopen("in.txt","r",stdin);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            a[i][j]=++id;
    int x,y,r,z;
    while(m--)
    {
		scanf("%d%d%d%d",&x,&y,&r,&z);
		for(int i=x-r;i<=x+r;i++)
		    for(int j=y-r;j<=y+r;j++)
		    	if(z==0)b[x-y+j][x+y-i]=a[i][j];
		    	else b[x+y-j][y-x+i]=a[i][j];
		for(int i=x-r;i<=x+r;i++)
		    for(int j=y-r;j<=y+r;j++)
		        a[i][j]=b[i][j];
	}
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=n;j++)
	        printf("%d%c",a[i][j],j==n?'\n':' ');
	return 0;
}

总结

看题面还以为有啥骚操作……其实就是模拟。

你可能感兴趣的:(比赛,洛谷,模拟)