code forces 400C Inna and Huge Candy Matrix

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,读懂题意之后觉得可能还有戏,结果第二天中午才改出来。幸好今天早上的正课不大困。 微笑






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值