Usaco Training [1.3] wormhole
解题要素:代码能力
解题步骤:理解题意 - 》搜索枚举所有可能的配对情况 - 》判断冲突并求解 - 》调试
一. 理解题意
这里讲几个不容易理解的点:
1. +x方向 即向右走
2. 一旦来到虫洞,就必须掉入
二. 搜索枚举所有可能的配对情况
考虑引入match数组,对于当前的节点来说,枚举后面的点是否已配对过即可
int match[N];
inline void dfs(int x) { //当前节点
if (x == n + ) {
rep(i, , n) if (check(i, i, , )) {
ans++;
break;
}
return;
}
if (match[x]) dfs(x + ); //已有匹配,无需枚举
else {
rep(i, x + , n) if (!match[i]) { //枚举
match[i] = x, match[x] = i;
dfs(x + );
match[i] = match[x] = ; //回溯
}
}
}
三. 判断冲突并求解
代码的核心部分,分析当前的一个状态有哪些量是相关的,加上对于题目的理解
int ans;
inline bool check(int begin, int now, int length, int state) { //state - 0 : walk 1 : worm
if (length > && now == begin && state == ) return ; //回到原点了,而且是用走的方式
if (state == ) { //走到虫洞口了就跳进去
check(begin, match[now], length + , );
}
else { //从虫洞d出来,就往前走,如果前面有虫洞,就走过去,没有就返回0
if (a[now].y == a[now + ].y) check(begin, now + , length + , ); else return ;
}
}
四. 调试
1.读入的坐标轴是与正常的行列相反的,在排序和判同行时须格外注意
2.因为奶牛所在初始虫洞处时便掉进去,所以最终只有可能走到虫洞处
最终的代码:
/*
PROG: wormhole
LANG: C++
*/
#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for(int i = a; i <= b; ++i) const int N = ; int n;
struct node {
int x, y;
}a[N]; bool cmp(const node &a, const node &b) {
return a.y == b.y ? a.x < b.x : a.y < b.y;
} int match[N], ans; inline bool check(int begin, int now, int length, int state) { //state - 0 : walk 1 : worm
if (length > && now == begin && state == ) return ;
if (state == ) {
check(begin, match[now], length + , );
}
else {
if (a[now].y == a[now + ].y) check(begin, now + , length + , ); else return ;
}
} inline void dfs(int x) {
if (x == n + ) {
rep(i, , n) if (check(i, i, , )) {
ans++;
break;
}
return;
}
if (match[x]) dfs(x + );
else {
rep(i, x + , n) if (!match[i]) {
match[i] = x, match[x] = i;
dfs(x + );
match[i] = match[x] = ;
}
}
} int main() {
freopen("wormhole.in", "r", stdin);
freopen("wormhole.out", "w", stdout);
scanf("%d", &n);
rep(i, , n) {
scanf("%d%d", &a[i].x, &a[i].y);
}
sort(a + , a + n + , cmp);
dfs();
printf("%d\n", ans);
return ;
}
Usaco Training [1.3] wormhole的更多相关文章
- 关于USACO Training
做了这么久的题目,突然发现最经典的 USACO Training 还没有做过?加速水一遍吧!我会把题解放在上面的.
- USACO Training Section 1.1 坏掉的项链Broken Necklace
题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...
- USACO Training Section 1.1 贪婪的送礼者Greedy Gift Givers
P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers 题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一 ...
- USACO Training Section 1.1 Your Ride Is Here
题目描述 众所周知,在每一个彗星后都有一只UFO.这些UFO时常来收集地球上的忠诚支持者.不幸的是,他们的飞碟每次出行都只能带上一组支持者.因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走 ...
- USACO Training Section 1.2 双重回文数 Dual Palindrom
题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做"回文数".例如,12321就是一个回文数,而77778就不是.当然,回文数的首和尾都应是非零的,因此0220就 ...
- Luogu USACO Training 刷水记录
开个坑记录一下刷USACO的Training的记录 可能会随时弃坑 只有代码和做法简述 可能没有做法简述 [USACO1.1]你的飞碟在这儿Your Ride Is He… 模拟,细节已忘 #incl ...
- usaco training 3.4.3 fence9 题解
Electric Fence题解 Don Piele In this problem, `lattice points' in the plane are points with integer co ...
- USACO Training Section 1.1 题解(共4题)
第一题 题目传送门:你的飞碟在这儿 分析 水题一道,输入两个字符串,将它们转换为数字并同时相乘,然后判断一下它们是不是对于47同余就可以了. 代码 #include<bits/stdc++.h& ...
- USACO Training刷题记录 By cellur925
Section 1.1 Your Ride Is Here 貌似没啥可说 Greedy Gift Givers 上来就想stl map映射,有两个坑:如果送给别人的人数为0,那么需要特判一下,防止整数 ...
随机推荐
- RT-Thread的CPU占用率查看
今天看到朋友的博客,他在描述RT-Thread钩子函数时,简单提了下RT-Thread中CPU占用,没有具体描述,所以我在这里做下补充. RT-Thread查看CPU使用率时,我知道的有这种方法. 大 ...
- JBuss--为所有JFinal开发者提供二次开发的后台管理系统
百度搜索:JBuss 或jfinal.com官网https://www.jfinal.com/share/1704 JBuss背景: 2018年6月1日,作者“为道日损”从上海一家xxx公司离职,那时 ...
- 一篇文章让你理解Ceph的三种存储接口(块设备、文件系统、对象存储)
“Ceph是一个开源的.统一的.分布式的存储系统”,这是我们宣传Ceph时常说的一句话,其中“统一”是说Ceph可以一套存储系统同时提供块设备存储.文件系统存储和对象存储三种存储功能.一听这句话,具有 ...
- IO侦探:多进程写ceph-fuse单文件性能瓶颈侦查
近期接到ceph用户报案,说是多进程direct写ceph-fuse的单个文件,性能很低,几乎与单进程direct写文件的性能一样.关乎民生,刻不容缓,笔者立即展开侦查工作~ 一.复现案情,寻踪追记 ...
- Android 蓝牙开发(2)——低功耗蓝牙
低功耗蓝牙官方文档 本文章是参考官网,然后加入自己实践中的理解完成!没有看上一篇的读者,可以先阅读一下前一篇,这是一个系列. 官网地址:https://developer.android.com/gu ...
- NetCore AutoMapper的封装
需要引用AutoMapper的Nuget包 如果需要忽略某个字段就在字段上面打标签如下: [IgnoreMap] public string IgnoreValue { get; set; } ...
- 基于SpringBoot的Web API快速开发基础框架
其实还是很因为懒,才会有这个案例项目的产生,每次开启一个终端的小服务都要整理一次框架,造成重复的.不必要的.缺乏创造性的劳动,SO,本着可以用.用着简单的原则上传代码到Github,希望有需要的朋友直 ...
- HBaseCon Asia2019 会议总结
一.首先会议流程. 1. The current status of HBase 2.The advantage and technology trend of HBase on the cloud ...
- pgsql查询优化之模糊查询
前言 一直以来,对于搜索时模糊匹配的优化一直是个让人头疼的问题,好在强大pgsql提供了优化方案,下面就来简单谈一谈如何通过索引来优化模糊匹配 案例 我们有一张千万级数据的检查报告表,需要通过检查报告 ...
- Ubuntu系统安装QQ等软件
1.安装deepin-wine环境:上https://github.com/wszqkzqk/deepin-wine-for-ubuntu页面下载zip包(或用git方式克隆),解压到本地文件夹,在文 ...