原题地址:http://codeforces.com/contest/374/problem/A

好久没写题目总结了,最近状态十分不好,无论是写程序还是写作业还是精神面貌……NOIP挂了之后总觉得缺乏动力精神难以集中……CF做的也是一塌糊涂,各种pretest passed + fail system test,该拿下的总是拿不下,都掉成Specialist了,也不知是什么原因,一点点尽力调整吧这是道水题,本来Div2的第一题就没什么好总结的,但是这道题为整场比赛创造了无数Hack得分(不得不吐槽这场比赛整个就是一逗比……),而且最后AC的人数很少,觉得有必要把没想清楚的地方捋一下,然后抽时间把之前几场的题A掉然后把总结写出来吧

题目大意:有一个n*m的方格,位于(i,j)位置上,每次能同时向上下方向移动a并且向左右方向移动b(必须同时向两个方向移动),求到达任意一个角上所需要的最小移动次数((1,1),(1,m),(n,1),(n,m)中的任意一个),当然,任何时候不可以移动到方格外面

题目分析:非常显然的,我们首先需要判断是否有解。通过分析,我们发现当出现以下情况时,我们才可能得到解。

(1)当初始位置在某个角上时(直接输出0)

(2)初始位置不在角上时,必须与某一个角的垂直距离为k*a,水平距离为t*b(k, t为正整数),且t与k奇偶性相同(原因很简单,我们必须移动max(k, t)次,这个值显然可能会比k和t中的某一个大,那样我们必须在某一方向上先左移再右移(或者先上后下),这个过程需要进行max(k, t) - min(k, t)次,每次操作必须包含两次移动,所以它们奇偶性应该相同)。

特别需要注意的是,我们必须在每个方向都可移动(即走一步之后不会走出棋盘)

然后直接把上面的汉字翻译成代码就可以了

 //date 20131218
#include <cstdio>
#include <cstring> const int INF = ; inline int min(int a, int b){return a < b ? a : b;}
inline int max(int a, int b){return a > b ? a : b;} int n, m, x, y, a, b; int main()
{
//freopen("a.in", "r", stdin); scanf("%d%d%d%d%d%d", &n, &m, &x, &y, &a, &b); if((((x - ) % a != ) && ((n - x) % a != )) || (((y - ) % b != ) && ((m - y) % b != )))
{
printf("Poor Inna and pony!\n");
return ;
} if(((x == ) || (x == n)) && ((y == ) || (y == m)))
{
printf("0\n");
return ;
} int ans = INF; if( (((x + a <= n) || (x - a > )) && ((y + b <= m) || (y - b > ))) && (((x - ) % a == ) && ((y - ) % b == )) && ((((x - ) / a) & ) == (((y - ) / b) & )))
ans = min(ans, max((x - ) / a, (y - ) / b)); if( (((x + a <= n) || (x - a > )) && ((y + b <= m) || (y - b > ))) && (((x - ) % a == ) && ((m - y) % b == )) && ((((x - ) / a) & ) == (((m - y) / b) & )))
ans = min(ans, max((x - ) / a, (m - y) / b)); if( (((x + a <= n) || (x - a > )) && ((y + b <= m) || (y - b > ))) && (((n - x) % a == ) && ((y - ) % b == )) && ((((n - x) / a) & ) == (((y - ) / b) & )))
ans = min(ans, max((n - x) / a, (y - ) / b)); if( (((x + a <= n) || (x - a > )) && ((y + b <= m) || (y - b > ))) && (((n - x) % a == ) && ((m - y) % b == )) && ((((n - x) / a) & ) == (((m - y) / b) & )))
ans = min(ans, max((n - x) / a, (m - y) / b)); if(ans == INF)printf("Poor Inna and pony!\n");
else printf("%d\n", ans); return ;
}

收获:还是不仅读题要细致,考虑解决问题时应该尽量各个方面都考虑到,写完代码仔细寻找BUG然后DEBUG,在高质量和熟练度的基础上再追求速度,不能一味求快,更要求稳。最近没少犯这样的错误。

Codeforces 374A - Inna and Pink Pony的更多相关文章

  1. codeforces 374A Inna and Pink Pony 解题报告

    题目链接:http://codeforces.com/problemset/problem/374/A 题目意思:给出一个 n 行  m 列 的棋盘,要将放置在坐标点为(i, j)的 candy 移动 ...

  2. codeforces 499A.Inna and Pink Pony 解题报告

    题目链接:http://codeforces.com/problemset/problem/499/A 题目意思:有两种按钮:1.如果当前观看的时间是 t,player 可以自动处理下一分钟,姑且理解 ...

  3. 220 DIV2 A. Inna and Pink Pony

    Inna and Pink Pony 输入n,m,i,j,a,b 可以看成n行m列的矩阵,起点(i,j),每次移动(a,b),(-a,-b),(-a,b),(a,-b) 可移动到(1,m),(n,1) ...

  4. cf A. Inna and Pink Pony(思维题)

    题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...

  5. CodeForces 400A Inna and Choose Options

    Inna and Choose Options Time Limit: 1000ms Memory Limit: 262144KB This problem will be judged on Cod ...

  6. Codeforces 374B - Inna and Nine

    原题地址:http://codeforces.com/problemset/problem/374/B 这道题没什么难度,但是考场上就是没写对.Round #220彰显了它的逗比性质——这道题的“标算 ...

  7. codeforces C. Inna and Huge Candy Matrix

    http://codeforces.com/problemset/problem/400/C 题意:给你一个n*m的矩阵,然后在矩阵中有p个糖果,给你每个糖果的初始位置,然后经过x次顺时针反转,y次旋 ...

  8. Codeforces 374C - Inna and Dima

    374C - Inna and Dima 思路:dfs+记忆化搜索 代码: #include<bits/stdc++.h> using namespace std; #define ll ...

  9. Codeforces 374D - Inna and Sequence

    374D - Inna and Sequence 思路: 树状数组+二分 因为被删的点最多N=1e6个,所以复杂度N*logN*logN 前段时间做过一道一样的题,这类题基本套路二分找没删除前的位置 ...

随机推荐

  1. 使用jQuery的9个误区

    千万别忘记了使用最新的版本哦,毕竟每个版本更新肯定会在功能或性能上有所提升,或者修复了几个Bug,但有时惰性让人不想再去研究新版本的变化,因此,提醒你别忘记了在新项目用新的一定比旧版本要好. AD: ...

  2. shell调用sqlplus批量执行sql文件

    在最近的工作中,经常需要批量执行一些DML, DDL, PL/SQL语句或导入一些Function, Procedure.因为support的国家比较多,常常需要一个登陆到一个国家的数据库上执行完成后 ...

  3. Linux远程备份—ftp方式、NFS方式

    问题:现在项目中每天都有从其它各个系统发过来的数据文件(存放在/var/data目录下,以.txt结尾),虽然很久以前的文件很少用到,占用了很多空间,却不能删除.于是,想把一个月以前的文件都压缩了传到 ...

  4. Object c中的alloc和init问题

    从开始学的NSString *name=[[NSString alloc] init] 起,老师教这句话是分配内存空间,一直在用,从来没考虑过它的内部是怎么实现的.今天无意中看到了这一句代码 NSSt ...

  5. .net sql connection pool leak

    Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This ma ...

  6. 使用Schtasks命令的注意事项

    在使用Schtasks命令时遇到了两个棘手的问题,耗费了一点时间,出现这个问题的时候查找网络资源也找不到真正的解决方案,最后还是自己悟出来了原因,所以在此把这些问题记录下来.如下: 服务器环境:win ...

  7. iOS百度地图路径规划和POI检索详细总结-b

    路径规划.png 百度地图的使用 百度地图API的导入网上说了许多坑,不过我遇到的比较少,这里就放两个比较常见的吧.坑一: 奥联WIFI_xcodeproj.png 如上图所示,在infoplist里 ...

  8. JavaScript与DOM的关系

    JavaScript与浏览器的工作 1.浏览器获取并加载你的页面,从上至下解析它的内容. 遇到JavaScript时,浏览器会解析代码,检查它的正确性,然后执行代码. 浏览器还会建立一个HTML页面的 ...

  9. 对象工具类 - ObjectUtils.java

    对象工具类,提供对象克隆.获取对象属性.类型判断.Map转换对象.对象转Map.设置对象属性等. 源码如下:(点击下载 -  ObjectUtils.java .JsonUtils.java .gso ...

  10. CentOS安装crontab及使用方法

    crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于 “crontab”文件中,以供之后读取和执行.通常,crontab储 ...