注意到\(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. SqlServer——事务—隔离级别

    隔离实际上是通过锁来实现的,作用于整个事务,它通常在事务开始前指定,如 SET TRANSACTION ISOLATION LEVEL READ Committed,指定后面的事务为 已提交读:而锁是 ...

  2. linux命令-passwd

    修改密码 #passwd 新密码 重新输入密码 #passwd dennywang  ////命令+用户名 ////////////////////////////////////////////// ...

  3. Android 使用SWIG生成Jni代码<转>

    http://blog.csdn.net/u010780612/article/details/51066819 感觉也就那样把,我没有编译成功,实用性暂时没看到多大优点...

  4. C程序设计语言(K&R) 笔记2

    (1) #include <stdio.h> main(){ int c; while((c = getchar()) != EOF){ putchar(c); } } 注意,因为 != ...

  5. hibernate的子查询

    hibernate原话 HQL supports subqueries in the where clause. We can't think of many good uses for subque ...

  6. Ajax笔记(二)

    JSON基本概念: JSON:javaScript对象表示法(JavaScript Object Notation) JSON是存储和交换文本信息的语法,类似XML.它采用键值对的方式来组织,易于人们 ...

  7. VS2012新建网站出现(1)的解决方案

    1.用记事本打开以下文件: D:\Users\lyn\Documents\IISExpress\config\applicationhost.config 2.删除sites结点下的所有site结点:

  8. Mybatis的批处理以及执行Update返回行数为负数

    项目中用到了批量更新. 在开发当中,可能经常会遇到批量处理这种情况,一般都再在java层面进行, 其本质是节省数据库连接打开关闭的的次数,占用更少的运行内存. 下面先记一下批处理映射吧: mybati ...

  9. 100078D Domestic Networks

    传送门 题目大意 有两种染料,给定它们的单价和数量,每染色一米需耗费一个单位的染料,一条边只能用一种燃料,给你一张图,要求你将其中的一些边染色使得在满足图联通的情况下花费最小并输出方案. 分析 首先, ...

  10. can基础知识介绍

    1.什么是can 2.can的特点 2.物理层特征 我们使用ISO11898标准,物理层特征如图所示 3.帧的种类介绍 实际上有一些帧是有硬件来实现的. 4.数据帧介绍 5.总线仲裁 6.位时序(用于 ...