python,样例能过,测试RE,已知非x,y颠倒,先谢谢大佬啦
查看原帖
python,样例能过,测试RE,已知非x,y颠倒,先谢谢大佬啦
670681
Utopia267楼主2022/1/25 21:46
n,m=map(int,input().split())
l=[[n*j+i+1 for i in range(n)]for j in range(n)]#初始l为从上到下,从左到右依次填充的列表
for i in range(m):
    x,y,r,z=map(int,input().split())
    x=x-1#统一题干坐标和列表中坐标
    y=y-1
    new=[]#用以保存一次魔法后的列表
    for i in range(n):
        new.append([])
    for i in range(x-r):#填充被旋转方阵上面(未受旋转影响的)部分
        for j in range(n):
            new[i].append(l[i][j])
    for i in range(x-r,x+r+1):#填充被旋转方阵左面(未受旋转影响的)部分
        for j in range(y-r):
            new[i].append(l[i][j])
    for i in range(2*r+1):#将被旋转方阵转置填入new
        for j in range(2*r+1):
            new[y+j-r].append(l[x+i-r][y+j-r])
    if z==0:
        for j in range(r+1):#将转置后方阵左右镜像,达到顺时针旋转效果
            for i in range(x-r,x+r+1):
                a,b=new[i][y+j],new[i][y-j]
                new[i][y-j],new[i][y+j]=a,b
    elif z==1:
        for i in range(r+1):#将转置后方阵上下镜像,达到逆时针旋转效果
            for j in range(y-r,y+r+1):
                a,b=new[x+i][j],new[x-i][j]
                new[x-i][j],new[x+i][j]=a,b
    for i in range(x-r,x+r+1):#填充被旋转方阵右面(未受旋转影响的)部分
        for j in range(y+r+1,n):
            new[i].append(l[i][j])
    for i in range(x+r+1,n):#填充被旋转方阵下面(未受旋转影响的)部分
        for j in range(n):
            new[i].append(l[i][j])
    l=new#将l更新为new,继续下一次魔法

for i in range(n):
    l[i]=[str(x) for x in l[i]]
    print(' '.join(l[i]))

2022/1/25 21:46
加载中...