注意到\(n\le10\),所以枚举经过的拐弯牛的所有排列。

注意到STL是一个好东西,所以我这里偷懒直接使用了next_permutation

枚举所有n的排列,对于每一个排列也就是经过拐弯牛的顺序,我们要判断两点:

  • 一个是相邻的两个牛(以及从(0,0)到第一个牛,和从最后一个牛到(0,0))的路径是否平行坐标轴,这个直接判相等即可。
  • 还有一个是要判断经过每一头牛是否拐弯了,对于第p头牛我们可以计算从第p-1头牛(当p=1就是原点)到第p头牛的路径向量,和第p头牛到第p+1头牛(当p=n就是远点)的路径向量,通过两个向量的点积就可以方便地判断是否转弯,由于我们已经判断了是否垂直平行坐标系,所以点积为0说明转弯90度,点积小于0说明掉头,点积大于0说明没有转弯。

然后答案就是合法的n的排列的个数

#include <bits/stdc++.h>
using namespace std; struct coord
{
int x, y;
}c[12]; int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int n, ans; bool work()
{
//上一次的坐标
int lx = 0, ly = 0;
for (int i = 0; i < n; i++)
{
int p = a[i];
int x = c[p].x, y = c[p].y;//本次的坐标
int nx = c[a[i + 1]].x, ny = c[a[i + 1]].y;//下一次的坐标
//判断路径是否平行于坐标轴
if(((lx == x) || (ly == y)) == 0)
return false;
if(((nx == x) || (ny == y)) == 0)
return false;
//1和2是两个向量
int x1 = x - lx, y1 = y - ly;
int x2 = nx - x, y2 = ny - y;
if((x1 * x2 + y1 * y2 > 0))//计算点积
{
return false;
}
lx = x;//更新坐标
ly = y;
}
return true;
} int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d%d", &c[i].x, &c[i].y);
a[n] = n;
do
ans += work();
while (next_permutation(a, a + n));
printf("%d\n", ans);
return dou;
}

让我们一起膜拜大佬林瑞堂@olinr

luogu1556 幸福的路的更多相关文章

  1. 洛谷P1556 幸福的路

    P1556 幸福的路 题目描述 每天,John都要为了农场里N(1≤N≤10)头牛的健康和幸福四处奔波. 每头牛的位置可以描述为一个二维坐标,John从坐标原点(0,0)出发.为了使路径更有趣,Joh ...

  2. 洛谷 P1556 幸福的路

    P1556 幸福的路 题目描述 每天,John都要为了农场里N(1≤N≤10)头牛的健康和幸福四处奔波. 每头牛的位置可以描述为一个二维坐标,John从坐标原点(0,0)出发.为了使路径更有趣,Joh ...

  3. P1556 幸福的路

    题意:平面内有N头牛$N\le 10$john从(0,0)出发,最后回到(0,0) 只有走到牛那里john才可以改变方向,否则沿着直线走 问john经过每一头牛并且在每一头牛出恰好改变方向一次的方案( ...

  4. 博客索引and题目列表

    目录 笔记整理 计划 要学的东西 缺省源 要做的题 搜索 高斯消元 矩阵 排列组合 2019.7.9 2019.7.10 kmp ac自动机 2019.7.11 2019.7.15 笔记整理 1.同余 ...

  5. Adapter的封装之路

    原文:Adapter的封装之路 一.几种常见列表效果: 假如要用RecyclerView实现下面的几种效果,你会如何实现呢? 效果1:单布局效果   效果2:多布局效果 有多种Item布局   效果3 ...

  6. 见证历史 -- 2013 NBA 热火夺冠之路有感

    见证历史-- 2013 NBA 热火夺冠之路有感今年NBA季后赛从第一轮看起,到最终的热火夺冠,应该看得是最爽的一次.但一些情节和细节,回忆起来,深有感悟. 1. 做人要低调詹宁斯豪言演黑八雄鹿本赛季 ...

  7. 通向高可扩展性之路(WhatsApp篇)---- 脸书花了190亿买来的WhatsApp的架构

    原文链接:http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-bill ...

  8. 屠蛟之路_集木成舟_ForthDay

    下数据库大山,行数里至水岸,无边无际的东海便豁然展现在屠蛟少年的眼前. 要想到达东海之中的蛟灵岛绞杀beta怪蛟,夺回心爱的小公举,少年们首先需要一艘经得起风浪的船.毕竟海上之路暗涌潜伏.同样凶险万分 ...

  9. 《少有人走的路:心智成熟的旅程》--[美]M·斯科特·派克

    <少有人走的路>,美国作家M·斯科特·派克所著 下面是我的书摘: * 归根到底,它告诉我们怎样找到真正的自我. * 人可以拒绝任何东西,但绝对不可以决绝成熟.决绝成熟,实际上就是在规避问题 ...

随机推荐

  1. 数据校验(3)--demo2---bai

    input_user.jsp <%@ page language="java" import="java.util.*" pageEncoding=&qu ...

  2. app中使用微信分享注意事项

    1.  在微信公众平台开通一个微信公众号,https://mp.weixin.qq.com 2.  将自己制作好的已签名的app安装到手机上 3.  下载微信开放平台获取应用签名的apk--- gen ...

  3. 类型:。net;问题:HQL;结果:HQL: Hibernate查询语言

    HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可 ...

  4. Delphi BLE 控件

    TBluetoothLEDevice LDevice.Address;//"00:11:22:DD:EE:FF". LDevice.DeviceName//Mi LDevice.I ...

  5. ssh框架整合其他方式(没有hibernate核心配置文件)

  6. 3-2 zk客户端连接关闭服务端,查看znode

    使用ZooKeeper官方提供的Client来连接.路径类似的结构. 连接到我们的门户HOST. quota属于zookeeper.quota是子节点,zookeeper是父节点.quota其实是一个 ...

  7. ROS探索总结(五)——创建简单的机器人模型smartcar

    前面我们使用的是已有的机器人模型进行仿真,这一节我们将建立一个简单的智能车机器人smartcar,为后面建立复杂机器人打下基础. 一.创建硬件描述包 roscreat-pkg  smartcar_de ...

  8. go语言linux环境配置

    linux的设置方法:有4个环境变量需要设置:GOROOT.GOPATH.GOBIN以及PATH.需要设置到某一个profile文件中(~/.bash_profile(单一用户)或/etc/profi ...

  9. Linux 大页面使用与实现简介(转)

    引言 随着计算需求规模的不断增大,应用程序对内存的需求也越来越大.为了实现虚拟内存管理机制,操作系统对内存实行分页管理.自内存“分页机制”提出之始,内存页面的默认大小便被设置为 4096 字节(4KB ...

  10. c++ 拷贝构造函数 继承

    拷贝构造函数要求把所有变量都需要做拷贝.在有继承关系情况先,子类的拷贝构造函数,需要调用父类拷贝构造函数.示例代码如下: class Base{ public: virtual ~Base(); Ba ...