code forces 400C Inna and Huge Candy Matrix
题目链接:http://codeforces.com/problemset/problem/400/C
题目大意:对图上点的操作,先给出图的规模n、m,再定义三种操作 1、顺时针转90度 2、中心旋转 3、逆时针转90度,其次数分别由三个整数x、y、z给出,再给出整数p,代表要标记图上的p个位置,以下p行给出p个位置的坐标。输出三种操作后的p个位置坐标。
题目分析:根据三种操作的周期性,将它们分别%4、%2、%4,然后去具体操作。
code:
#include<stdio.h>
int a[100010][2],temp;
void rotate(int m,int n,int i,int j,int x)
{
switch(x)
{
case 1:
{
temp=n-a[i][0]+1;
a[i][0]=a[i][1];
a[i][1]=temp;
break;
}
case 2:
{
a[i][0]=n-a[i][0]+1;
a[i][1]=m-a[i][1]+1;
break;
}
case 3:
{
temp=m-a[i][1]+1;
a[i][1]=a[i][0];
a[i][0]=temp;
}
}
}
int main()
{
int i,j,m,n,x,y,z,p;
//freopen("c.txt","r",stdin);
scanf("%d%d%d%d%d%d",&n,&m,&x,&y,&z,&p);
x%=4,z%=4,y%=2,z=4-z;
//printf("x==%d,y==%d,z==%d\n",x,y,z);
for(i=0;i<p;i++)
{
scanf("%d%d",&a[i][0],&a[i][1]);
rotate(m,n,i,j,x);
if(y)
{
if(x%2)a[i][1]=n-a[i][1]+1;
else a[i][1]=m-a[i][1]+1;
}
if(x%2)rotate(n,m,i,j,z);
else rotate(m,n,i,j,z);
}
for(i=0;i<p;i++)
{
printf("%d %d\n",a[i][0],a[i][1]);
}
return 0;
}
PS:这题太要命了……拿过来的时候还剩17min,读懂题意之后觉得可能还有戏,结果第二天中午才改出来。幸好今天早上的正课不大困。