Codeforces 374A - Inna and Pink Pony

这是一道非常坑的A题

今天我们机房的一大堆人一起做这题,然后这是其中几个人的提交记录(这只是一部分)

然后这是比赛的过题人数

接下来我们看看这道题

大意就是给出一个 n 行  m 列 的棋盘,要将放置在坐标点为(i, j)的 candy 移动到四个角落(1,1),(1,m),(n, 1),(n, m) 中的其中一个。

假设当前在位置(x, y),规定每次移动遵循,(x+a, y+b) 、 (x+a, y-b)、 (x-a, y+b)、(x-a, y-b)。求最小的移动次数。.

然后处理细节极多

求出 (i, j) 到每个角落的距离diff_x, diff_y,而且diff_x 必须要除得尽 a, diff_y除得尽 b,这个很好理解,次数嘛~~~

除此,除完之后这两个值必须是同奇或同偶。还有就是移动的时候不能超出边界,在边界时的特判了~~~~

坑点:很多人可能都会死在样例37,这个样例比较特殊,就是某一维不需要移动,但另一维需要移动,但不需要移动的那维,若发生移动,则会越界。给个样例如5 7 1 3 10 2,实际上是不能移动的,错的人可能都会输出2。

AC代码

#include<bits/stdc++.h>
using namespace std;
int n,i,j,m,a,b,mn=1e7;
int main()
{
    scanf("%d%d%d%d%d%d",&n,&m,&i,&j,&a,&b);
    int t1=i-1,t2=j-1;
    if (t1%a==0&&t2%b==0&&(t1/a==t2/b||(abs((t1/a)-(t2/b))%2==0&&(((t1/a)||((n-t1-1)/a))&&((t2/b)||((m-t2-1)/b))))))if (max((t1/a),(t2/b))<mn)mn=max((t1/a),(t2/b));
    t1=i-1,t2=m-j;
    if (t1%a==0&&t2%b==0&&(t1/a==t2/b||(abs((t1/a)-(t2/b))%2==0&&(((t1/a)||((n-t1-1)/a))&&((t2/b)||((m-t2-1)/b))))))if (max((t1/a),(t2/b))<mn)mn=max((t1/a),(t2/b));
    t1=n-i,t2=j-1;
    if (t1%a==0&&t2%b==0&&(t1/a==t2/b||(abs((t1/a)-(t2/b))%2==0&&(((t1/a)||((n-t1-1)/a))&&((t2/b)||((m-t2-1)/b))))))if (max((t1/a),(t2/b))<mn)mn=max((t1/a),(t2/b));
    t1=n-i,t2=m-j;
    if (t1%a==0&&t2%b==0&&(t1/a==t2/b||(abs((t1/a)-(t2/b))%2==0&&(((t1/a)||((n-t1-1)/a))&&((t2/b)||((m-t2-1)/b))))))if (max((t1/a),(t2/b))<mn)mn=max((t1/a),(t2/b));
    if(mn!=1e7)printf("%d\n",mn);else puts("Poor Inna and pony!");
    return 0;
}

 

转载于:https://www.cnblogs.com/Orange-User/p/7531717.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值