题目

题目大意

一个三角形的网格图,三角形与其有共同边的三角形相连。

起点到所有终点的最短距离。


思考历程

数据看起来还挺大的,所以不是什么图论算法。

这显然是一个结论题。

什么结论?

然后我就开始推:

一个点(x,y)(x,y)(x,y),它可以到达(x,y−1)(x,y+1)(x,y-1)(x,y+1)(x,y−1)(x,y+1)。

如果yyy是奇数,那么可以到达(x+1,y+1)(x+1,y+1)(x+1,y+1),否则可以到达(x−1,y−1)(x-1,y-1)(x−1,y−1)

将其在平面直角坐标系中表示出来,得到一个很好看的图(懒得画了)。

感性地想出了一个式子,感觉上好像没什么问题,打了交上去。

结果60分……


正解

这个方法有很多。

假设起点是上面那个(反正边是双向的),现在它要往下走:

如果它是正三角形,意味着它可以直接往下走。

如果它是倒三角形,就将其向左或向右一个,那就是正三角形的情况了。

可以推推式子,求出它走最短距离到达终点那一行的左右边界。

所谓走最短距离,就是先往下走,然后向左或向右,继续向下……

如果终点在边界内,答案就是最短距离。否则走到终点那一行的左边界或右边界,然后左右移动到终点。

还有一种特别好的方法。

我们如果只考虑上下走,那么对于那两个点来说,不管怎样,一定会走它们层数之差的距离。

这是我们以(1,1)(1,1)(1,1)为端点的情况,那不妨考虑一下,将图旋转六十度,以(n,1)(n,1)(n,1)或(n,2n−1)(n,2n-1)(n,2n−1)为顶点。

所以我们只需要算出它们分别以三个顶点的层数之差,加起来,就是答案。

比较好理解,所以我的程序打的就是这种方法。


代码

using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
int main(){
int n,m,sx,sy,sz;
scanf("%d%d%d%d",&n,&m,&sx,&sy);
sz=(sx*2-sy-1)/2+1,sy=(sy-1)/2+1;
int ansx,ansy,ans=2147483647;
for (int i=1;i<=m;++i){
int x,y,z,t;
scanf("%d%d",&x,&y);
t=abs(x-sx)+abs((y-1)/2+1-sy)+abs((x*2-y-1)/2+1-sz);
if (t<ans || t==ans && (x<ansx || x==ansx && y<ansy))
ansx=x,ansy=y,ans=t;
}
printf("%d %d\n%d",ansx,ansy,ans+1);
return 0;
}

总结

题目不要想得太复杂……

能用一个三角形来想的题目就不要傻傻地用平面直角坐标系来想……

[JZOJ1320] 【Usaco2009 gold 】拯救奶牛的更多相关文章

  1. Usaco 2010 Dec Gold Exercise(奶牛健美操)

    /*codevs 3279 二分+dfs贪心检验 堆版本 re一个 爆栈了*/ #include<cstdio> #include<queue> #include<cst ...

  2. BZOJ-USACO被虐记

    bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...

  3. 不熟,不会,未a的题列表

    不熟: jzoj5968. 电竞选手(不知道公式如何得来) jzoj4877. [NOIP2016提高A组集训第10场11.8]力场护盾 (对向量不熟悉,不知道为什么结果要取反) jzoj4867. ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. 6 November in 614

    Contest A. greet map,完了. B. gift map,完了. C. [Usaco2008 Nov Gold] 安慰奶牛 最小生成树.新边权设为原边权的两倍,再加上两端点的点权.完了 ...

  6. [USACO2009 NOV GOLD]奶牛的图片

    校内题,不给传送门了. 以前做完NOIp2013的火柴排队那道题后,当时很担心NOIp会出那种题,因为贪心的规则能不能看出来真的要看运气.但是这类题做多了后发现其实那道题的规则其实是很多题都已经用到了 ...

  7. BZOJ3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队

    3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 89  Solve ...

  8. 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队

    3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 129  Solv ...

  9. BZOJ 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 动态规划

    3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=34 ...

随机推荐

  1. 快速排序--Python实现

    快速排序算法:1.选择一个基准数2.小于基准数的放左边,大于基准数的放右边3.利用递归的方法针对左边的数据进行快速排序,再对右边的数据进行快速排序4.递归停止的条件:数组为空或者只有一个元素 时间复杂 ...

  2. Java-Class-@I:org.springframework.validation.annotation.Validated

    ylbtech-Java-Class-@I:org.springframework.validation.annotation.Validated 1.返回顶部   2.返回顶部 1. package ...

  3. 10.2 External interrupt/event controller (EXTI)

    EXTI控制器的主要特点如下: 每个中断/事件线上的独立触发器和掩码 每个中断行的专用状态位 生成最多20个软件事件/中断请求 脉冲宽度小于APB2时钟周期的外部信号检测. 每条中断线路的专用状态位生 ...

  4. mysql安装总结

    #mysql安装# 安装工具:yum -y install gcc-c++ ncurses cmake make ncurses-devel # 拷贝配置文件到指定目录:rm -rf /etc/my. ...

  5. selenium基础-图形验证码

    selenium基础-图形验证码 一.图形验证码作用 设计的初衷其实就是为了防自动化,防止一些人利用自动工具恶意攻击网站 二.图形验证码是由客户端生成还是由服务器端生成的? 图形验证码是由服务器端生成 ...

  6. 论文阅读笔记---ShuffleNet V1

    01 ShuffleNet V1要解决什么问题 为算力有限的嵌入式场景下专门设计一个高效的神经网络架构. 02 亮点 使用了两个新的操作:pointwise group convolution和cha ...

  7. mysql 需要掌握的重点

    1. 安装mysql:     google it.2. 新建database,table: create database database_name;create table table_name ...

  8. centos安装与配置R语言

    Linux下安装R语言 一.编译安装 由于采用编译安装,所以需要用到gcc编译环境,在编译前check文件时还会用到libXt-devel和readline-devel两个依赖,所以在编译R语言源码时 ...

  9. java 冒泡排序法、选择排序

    1.冒泡排序 /* * 冒泡排序 * 外层控制循环多少趟,内层控制每一趟的循环次数 */ public class Test08 { public static void main(String[] ...

  10. boost 条件变量

    // boost 条件变量 // 做个简单的笔记 #include <boost/thread/mutex.hpp> #include <boost/thread/condition ...