题目

题目大意

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

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


思考历程

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

这显然是一个结论题。

什么结论?

然后我就开始推:

一个点(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. JVM内核-原理、诊断与优化学习笔记(六):类装载器

    文章目录 class装载验证流程 class装载验证流程 class装载验证流程 -加载 class装载验证流程 -链接 验证 链接 -> 验证 文件格式的验证 元数据验证(class文件简单语 ...

  2. Ehcache3.x学习(一)入门

    简介 Ehcache 是一个开源的高性能缓存,拥有很高的拓展性和伸缩性,广泛使用各种 Java 项目中(如 Hibernate 默认使用 Ehcache作为二级缓存),在目前基于 Java 的缓存方案 ...

  3. 20140408 父类指针指向子类对象 ;delete ;static作用

    1.父类指针可以指向子类对象 静态联翩:如果以父类指针指向派生类对象,那么经由该指针只能访问父类定义的函数 动态联编:根据指针实际指向的对象类型确定 2.面试宝典 P110 面试题5  #includ ...

  4. [JSOI2019]精准预测

    题目 这么明显的限制条件显然是\(\text{2-sat}\) 考虑按照时间拆点,\((0/1,x,t)\)表示\(x\)个人在时间\(t\)是生/死 有一些显然的连边 \[(0,x,t+1)-> ...

  5. git mac安装

    1.git安装包安装 去官网下载最行的git版本 安装即可 https://git-scm.com/download/mac 但是一般的git仓库需要sshkey来做验证 下面奉上具体的命令: 需要生 ...

  6. drools决策表的使用

    决策表我们在drools规则引擎初探里做了简单介绍,这里主要是介绍如何通过java代码来把这个excel文件和drools关联起来,如何使其达到我们想要的效果. 这里假设我们在resources目录下 ...

  7. 2018-8-10-WPF-使用-Direct2D1-画图-绘制基本图形

    title author date CreateTime categories WPF 使用 Direct2D1 画图 绘制基本图形 lindexi 2018-08-10 19:16:53 +0800 ...

  8. React和vue的差异和相似地方

    React 单向绑定(加插件后,还是可以双向绑定) Vue 双向绑定 组件化 1. React,需要编写render函数, 2. 当React状态的状态state改变是render就会重新被调用, 重 ...

  9. mysql连接超时的问题处理

    1. 内网 ts 连接mysql 有时候会连接失败, 原因是 连接超时, 当时所有服务器一起启动,抢占资源,导致连接超过10s. 现在增加一次连接机会, 增加一些日志. 2. 并且对mysql 全局参 ...

  10. vue-router 的重定向-redirect

    1. 我们主要在index.js重新设置路由的重新定向redirect参数 index.js import Vue from 'vue' import Router from 'vue-router' ...