一道简单的几何变换

来源:互联网 发布:统计局70城房价数据 编辑:程序博客网 时间:2024/05/16 18:40
一道简单的几何变换
运行时限: 1000 ms   单次运行时限: 1000 ms   内存限制: 64 MB
总提交: 68次   通过: 7次
Judge By Case

题目描述

小光最近在学习几何变换,老师给他留了一个作业,在二维平面上有n个点(x,y),老师给了m个几何变换对n个点进行操作,要求小光输出变换后的n个点的坐标(x’,y’)。小光为了偷懒,请求你帮他写个程序来完成老师的作业。
由于小光刚刚学习几何变换,老师只会给出四种变换,如下:
平移变换: (x’,y’)=(x+p,y’+q) 程序的输入格式为:1 p q (p,q为整数) 
缩放变换: (x’,y’)=(x*L,y*L) 程序的输入格式为:2 L (L为整数)
上下翻转: (x’,y’)=(x,-y) 程序的输入格式为:3
左右翻转: (x’,y’)=(-x,y) 程序的输入格式为:4

程序输入说明

N(1<=N<=10^5)
然后N个点(x,y) 其中x,y均为整数
M (1<=M<=10^5)
然后M个变换,输入格式如上所述。

程序输出说明

N个点的坐标

程序输入样例

可见格式带空格和换行符的格式带空格和换行符的格式说明
21 12 211 1 1


程序输出样例

OriginalTransformed带空格和换行符的格式说明
2 23 3

提示

注意同一组数据中每个点进行的变换都相同。

题目来源

安徽省2014年“京胜杯”大学生程序设计竞赛
[统计数据]     [提 交]
为了节省时间必须要注意不能对单个坐标计算 而是便输出边计算:
AC情况:

合工大AC情况:

代码C:
# include <stdio.h># define N 100001int A[2][N];int main(){    int W[4]={1,0,1,0},n,m,L,i,P,Q;    while(scanf("%d",&n)==1)    {    for(i=0;i<n;i++)      scanf("%d%d",&A[0][i],&A[1][i]);    scanf("%d",&m);    for(i=0;i<m;i++)    {        scanf("%d",&L);        if(L==1){        scanf("%d%d",&P,&Q);        W[1]+=P;        W[3]+=Q;        }       else if(L==2){        scanf("%d",&P);        Q=0;        while(Q<4)        W[Q++]*=P;       }       else if(L==3){        W[2]=-W[2];        W[3]=-W[3];       }       else{        W[0]=-W[0];        W[1]=-W[1];       }    }    for(i=0;i<n;i++)    printf("%d %d\n",W[0]*A[0][i]+W[1],W[2]*A[1][i]+W[3]);       W[0]=W[2]=1;       W[1]=W[3]=0;   }    return 0; }



原创粉丝点击