您的位置:首页 > 其它

CF 400C - Inna and Huge Candy Matrix

2014-03-16 20:19 323 查看
坐标系的转换- -!

顺时针(x,y)-->(y,n+1-x)-->(n+1-x,m+1-y)-->(m+1-y,x)

有很多细节:

1.xk=yk,yk=n+1-xk这样是错的,xk已经变换了

2.如果又有正旋又有逆旋,要考虑n,m的旋转

3.不能直接选择n,m,不然下个坐标的n,m是错乱的

#include<iostream>
#include<stdio.h>
using namespace std;

int n,m,x,y,z,p,xk,yk;
void trans(int xk,int yk){
int tx,ty,tn=n,tm=m;
if(x){
if(x==1)
tx=yk,ty=n+1-xk;
else if(x==2)
tx=n+1-xk,ty=m+1-yk;
else if(x==3)
tx=m+1-yk,ty=xk;
xk=tx,yk=ty;
if(x%2)//--转了以后行列变化
swap(tn,tm);
}
//printf("%d %d\n",xk,yk);
if(y==1)
yk=tm+1-yk;
//printf("%d %d\n",xk,yk);
if(z){
if(z==1)
tx=tm+1-yk,ty=xk;
else if(z==2)
tx=tn+1-xk,ty=tm+1-yk;
else if(z==3)
tx=yk,ty=tn+1-xk;
xk=tx,yk=ty;
}
printf("%d %d\n",xk,yk);
}
int main(){
cin>>n>>m>>x>>y>>z>>p;
x%=4;y%=2;z%=4;
for(int i=0;i<p;i++){
scanf("%d %d",&xk,&yk);
trans(xk,yk);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: