Luogu链接

题目描述

农夫约翰爱好在周末进行高能物理实验的结果却适得其反,导致N个虫洞在农场上(2<=N<=12,n是偶数),每个在农场二维地图的一个不同点。

根据他的计算,约翰知道他的虫洞将形成 N/2 连接配对。例如,如果A和B的虫洞连接成一对,进入虫洞A的任何对象体将从虫洞B出去,朝着同一个方向,而且进入虫洞B的任何对象将同样从虫洞A出去,朝着相同的方向前进。这可能发生相当令人不快的后果。

例如,假设有两个成对的虫洞A(1,1) 和 B(3,1),贝茜从(2,1)开始朝着 +x 方向(右)的位置移动。贝茜将进入虫洞 B(在(3,1)),从A出去(在(1,1)),然后再次进入B,困在一个无限循环中!

| . . . .
| A > B . 贝茜会穿过B,A,
+ . . . . 然后再次穿过B

农夫约翰知道他的农场里每个虫洞的确切位置。他知道贝茜总是向 +x 方向走进来,虽然他不记得贝茜的当前位置。请帮助农夫约翰计算不同的虫洞配对(情况),使贝茜可能被困在一个无限循环中,如果她从不幸的位置开始。

输入输出格式

输入格式:

第1行:N(N<=12),虫洞的数目

第2到N+1行:每一行都包含两个空格分隔的整数,描述一个以(x,y)为坐标的单一的虫洞。每个坐标是在范围 0-1000000000。

输出格式:

第1行:会使贝茜从某个起始点出发沿+x方向移动卡在循环中的不同的配对

输入输出样例

输入样例#1:

4
0 0
1 0
1 1
0 1
输出样例#1:

2

说明

如果我们将虫洞编号为1到4,然后通过匹配 1 与 2 和 3 与 4,贝茜会被卡住,如果她从(0,0)到(1,0)之间的任意位置开始或(0,1)和(1,1)之间。

| . . . .
4 3 . . . 贝茜会穿过B,A,
1-2-.-.-. 然后再次穿过B

相似的,在相同的起始点,如果配对是 1-3 和 2-4,贝茜也会陷入循环。(如果贝西从3进去,1出来,她会走向2,然后被传送到4,最后又回到3)

仅有1-4和2-3的配对允许贝茜从任何二维平面上的点向+x方向走不出现循环。

首先看到数据范围,N<=12,基本可以确定要么是搜索要么是状压.这里需要输出方案数,那么选择搜索比较好判断是否可行.

所以这里可以采用搜索来生成所有的配对情况,然后再验证.验证可以直接模拟是否能形成循环,也就是从一个点出发能不能第二次到达它,可以用模拟的方法.

下面给出代码及注释.

 #include<bits/stdc++.h>
using namespace std; int n;
int ans = ;
int match[]; struct node{
int x , y;
}a[]; bool cmp(node a , node b){
return a.y==b.y?a.x<b.x:a.y<b.y;
} bool con(int cnt , int now , int ed , int in){//用cnt记录走过的次数,now记录现在在哪个点,ed记录要到的点(就是当前在判断的点),in表示当前点的状态(1表示进入该点,0表示出该点)
if(cnt!=&&now==ed&&in == ) return true;
if(in == ){//若出该点,则判断是否能进入下一个点
if(a[now].y == a[now+].y)//已经按照坐标排了序,则只有可能下一个点的纵坐标与该点坐标相同
return con(cnt+,now+,ed,);//进入下一个点
else return false;//没有点能够进入,则不存在循环
}
if(in) return con(cnt+,match[now],ed,);//进入了一个点,就要从它的匹配点出来
} bool check(){
for(int i=;i<=n;i++){
if(con(,i,i,)) return true;//对每个点进行判断,若有环,则该方案成功
}
return false;
} void dfs(int deep){//搜索生成所有方案
if(deep == n+){
if(check()) ans++;
return;
}
if(!match[deep]){
for(int i=deep+;i<=n;i++){
if(!match[i]){
match[i] = deep , match[deep] = i;
dfs(deep+);
match[i] = match[deep] = ;
}
}
}
else dfs(deep+);
return;
} int main(){
cin >> n;
for(int i=;i<=n;i++)
cin >> a[i].x >> a[i].y;
sort(a+ , a+n+ , cmp);
dfs();
cout << ans << endl;
return ;
}

[USACO1.3]虫洞的更多相关文章

  1. P1444 [USACO1.3]虫洞wormhole

    luogu P1444 [USACO1.3]虫洞wormhole 首先感谢ghj的讲解 题目描述 农夫约翰爱好在周末进行高能物理实验的结果却适得其反,导致N个虫洞在农场上(2<=N<=12 ...

  2. [USACO1.3]虫洞wormhole

    题目描述 农夫约翰爱好在周末进行高能物理实验的结果却适得其反,导致N个虫洞在农场上(2<=N<=12,n是偶数),每个在农场二维地图的一个不同点. 根据他的计算,约翰知道他的虫洞将形成 N ...

  3. USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)

    usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...

  4. Luogu USACO Training 刷水记录

    开个坑记录一下刷USACO的Training的记录 可能会随时弃坑 只有代码和做法简述 可能没有做法简述 [USACO1.1]你的飞碟在这儿Your Ride Is He… 模拟,细节已忘 #incl ...

  5. USACO wormhole

    洛谷 P1444 [USACO1.3]虫洞wormhole https://www.luogu.org/problemnew/show/P1444 JDOJ 2386: USACO 2013 Dec ...

  6. hzwer模拟赛 虫洞

    [题目描述] N个虫洞,M条单向跃迁路径.从一个虫洞沿跃迁路径到另一个虫洞需要消耗一定量的燃料和1单位时间.虫洞有白洞和黑洞之分.设一条跃迁路径两端的虫洞质量差为delta. 1.从白洞跃迁到黑洞,消 ...

  7. USACO1.5Superprime Rid[附带关于素数算法时间测试]

    题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们.农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组 ...

  8. USACO1.1Broken Necklace[环状DP作死]

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

  9. 洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib

    P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 284通过 425提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 超时怎么办? ...

随机推荐

  1. KMP python实现

    首先去 https://blog.csdn.net/starstar1992/article/details/54913261/ 这里看下思想: 然后代码实现,一定要多调试几遍方能看懂: def ge ...

  2. 2016.01.04接触spring一年开始读spring源码

    http://www.cnblogs.com/xing901022/p/4178963.html#_label0 遇到第一个问题The processing instruction target ma ...

  3. CDateTimeUI类源码分析

    CDateTimeUI是duilib里选择日期的控件,继承于CLabelUI控件,用于记录已经选择的日期,选择控件则是调用win32的日期选择控件. CDateTimeUI包含两个类,一个是CDate ...

  4. Python 3基础教程29-os模块

    本文介绍os模块,主要是介绍一些文件的相关操作. 你还有其他方法去查看os 1. help() 然后输入os 2. Python接口文档,前面提到的用浏览器打开的,os文件路径为:C:\Users\A ...

  5. 为Zabbix配置RabbitMQ监控模板

    RabbitMQ的配置参考 https://github.com/jasonmcintosh/rabbitmq-zabbix 简而言之,具体分为几个步骤: 1. 将脚本文件(scripts文件夹)和配 ...

  6. Ajax跨域请求解决方式

    前端 jQuery方式 .ajax({ type: "POST", url: "http://xxx.com/api/test", dataType: 'jso ...

  7. 如何创建LocalDB数据库和数据库实例

    LocalDB是SQL Server 2012带来的新特性,它是一个专门为开发人员量身定制的轻量级数据库,下面介绍如何使用它. 创建LocalDB数据库的方法: 打开服务器资源管理器,右键点击“数据连 ...

  8. windows下自己常用的几个bat

    1.samba映射盘符和解除 net use Z: "\\sambaserver ip\dir" "password" /user:"username ...

  9. PAT 1080 MOOC期终成绩

    https://pintia.cn/problem-sets/994805260223102976/problems/994805261493977088 对于在中国大学MOOC(http://www ...

  10. ubuntu16.04 装了一天的gitlab

    1.安装gitlab baidu安装完了[后续再自己写安装过程] 2.遇到的问题 访问gitlab http://ip 可以进入页面也能操作但是console报404无法加载js和css,这样很不方便 ...