Codeforces 374A - Inna and Pink Pony

这是一道非常坑的题

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

然后这是比赛的过题人数

接下来我们看看这道题

大意就是给出一个 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;
}
时间: 2024-10-11 22:45:41

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

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

题目链接:http://codeforces.com/problemset/problem/499/A 题目意思:有两种按钮:1.如果当前观看的时间是 t,player 可以自动处理下一分钟,姑且理解为跳到t+1:  2.直接跳过 x 分钟,如果player在第 t 分钟,则可以跳到 t+x.问恰好可以看完 n 部电影的最少观看时间.观看一部电影表示 li, li+1, li+2, ..., ri-1, ri 的时间都要覆盖到. 一开始做的时候想得太简单了,确实需要每部电影的所有时间,但是如果不

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),(n,m),(1,1)四个方向 如果可以移动到这四个点中的一个或多个. 输出到其中一个点的最短距离 如果不能输出 Poor Inna and pony! input 5 7 1 3 2 2 output 2 input 5 5 2 3 1 1 Poor Inna and pony! PS:开始想成

Codeforces 374D Inna and Sequence 二分+树状数组

题目链接:点击打开链接 给定n个操作,m长的序列a 下面n个数 if(co>=0)则向字符串添加一个co (开始是空字符串) else 删除字符串中有a的下标的字符 直接在序列上搞,简单模拟 #include<stdio.h> #include<iostream> #include<string.h> #include<set> #include<vector> #include<map> #include<math.h&

CodeForces 400A Inna and Choose Options

Inna and Choose Options Time Limit: 1000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Original ID: 400A64-bit integer IO format: %I64d      Java class name: (Any) There always is something to choose from! And now, instead of "N

codeforces C. Inna and Huge Candy Matrix

http://codeforces.com/problemset/problem/400/C 题意:给你一个n*m的矩阵,然后在矩阵中有p个糖果,给你每个糖果的初始位置,然后经过x次顺时针反转,y次旋转,z次逆时针反转,问最后每个糖果的位置. 思路:推出顺时针反转.旋转.逆时针反转的坐标的变化即可. 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <iostream>

!codeforces 400E Inna and Binary Logic-yy-(位运算)

题意:有n个数存放在数组a1[]中,然后数组a1[]生成数组a2[],a2[]生成a3[].....一直生成an[],公式是ai[k]=ai-1[k]&ai-1[k+1],现在如果把初始数据也就是数组a1[]里的某一个数换成另一个数,求所有数组的总和是多少. 分析:既然这里的数组生成公式里用到了位与运算,那么就用位运算来做了. 把数字写成二进制,公式的意思就是说同一数组的相邻数字的对应二进制位相与生成下一数组的一个数字的对应二进制位.先求出不做改变前的总和,然后每次改变通过替换数字与原数字每一位

codeforces 374D. Inna and Sequence 线段树

题目链接 给m个数, n个操作, 一个数列, 初始为空.一共有3种操作, 在数列末尾加0, 加1, 或删除位置为a[i]的数, a[i]为初始给的m个数, 如果a[i]大于数列长度, 那么什么也不发生. 求最后的数列. 用线段树, 因为最多只有n个操作, 也就是说最后的01串最大长度为n, 那么可以用一个变量now表示当前插入的话应该插入到哪个位置, 每插入一个数, now就加1,并且now最终不会超过n. 删除操作的话, 递归的进行, 如果sum[rt<<1]大于要删除的下标那么就往左儿子递

Codeforces 390E Inna and Large Sweet Matrix 树状数组改段求段

题目链接:点击打开链接 题意:给定n*m的二维平面 w个操作 1.0 (x1,y1) (x2,y2) value for i : x1 to x2 for j : y1 to y2 mp[i][j] += value; 2.1 (x1, y1) (x2 y2) ans1 = 纵坐标在 y1,y2间的总数 ans2 = 横坐标不在x1,x2间的总数 puts(ans1-ans2); 因为n最大是4e6, 所以用树状数组改段求段代替线段树 #include <stdio.h> #include &

CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段)

树状数组只能实现线段树区间修改和区间查询的功能,可以代替不需要lazy tag的线段树,且代码量和常数较小 首先定义一个数组 int c[N]; 并清空 memset(c, 0, sizeof c); 1.单点修改 : c[x] += y; 对应的函数是 change(x, y); 2.求前缀和 :  对应的函数是 int sum(x) 两种操作的复杂度都是O(logn) 模板如下: int c[N], maxn; inline int Lowbit(int x){return x&(-x);}