一道简单的几何变换

博客包含程序题目描述、输入输出说明、输入输出样例、提示以及题目来源等内容,聚焦于程序题目的相关信息,为解决程序问题提供指引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一道简单的几何变换
运行时限: 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个点的坐标
可见格式带空格和换行符的格式带空格和换行符的格式说明
2
1 1
2 2
1
1 1 1


OriginalTransformed带空格和换行符的格式说明
2 2
3 3
注意同一组数据中每个点进行的变换都相同。
安徽省2014年“京胜杯”大学生程序设计竞赛
为了节省时间必须要注意不能对单个坐标计算 而是便输出边计算:
AC情况:

合工大AC情况:

代码C:
# include <stdio.h>
# define N 100001
int 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; 
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值