Description

题库链接

给出平面上 \(n\) 个点,一开始你可以选任何一个点作为起点,接着对于每一个你在的位置,你可以选取一个未走过的点。将路径(线段)上所有的点均选上(包括起点终点),并走到选择的那个点上。询问选的点的个数 \(\geq 4\) 的方案数。区别不同的方案,只需要路径不一样即可。

\(1\leq n\leq 20\)

Solution

状压 \(dp\) 。

先预处理出两点间路径上会经过的点。 \(dp\) 的时候需要选择路径上不会经过未选择点的方案走。

复杂度 \(O(n^3+2^nn^2)\) 。

Code

#include <bits/stdc++.h>
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const int N = 20+5, SIZE = (1<<20)+5, yzh = 100000007; struct point {
int x, y;
point (int _x = 0, int _y = 0) {x = _x, y = _y; }
point operator - (const point &b) const {return point(x-b.x, y-b.y); }
int operator * (const point &b) const {return x*b.y-y*b.x; }
}a[N];
int n, mp[N][N], bin[N], f[SIZE][N], cnt[SIZE], ans; void check(int x, int y) {
int mxx = max(a[x].x, a[y].x), mnx = min(a[x].x, a[y].x);
int mxy = max(a[x].y, a[y].y), mny = min(a[x].y, a[y].y);
for (int i = 1; i <= n; i++)
if (i != x && i != y)
if ((a[y]-a[x])*(a[i]-a[x]) == 0)
if (a[i].x >= mnx && a[i].x <= mxx && a[i].y >= mny && a[i].y <= mxy)
mp[x][y] |= bin[i-1];
}
void work() {
scanf("%d", &n);
bin[0] = 1; for (int i = 1; i <= n; i++) bin[i] = bin[i-1]<<1;
for (int i = 1; i <= bin[n]; i++) cnt[i] = cnt[i-lowbit(i)]+1;
for (int i = 1; i <= n; i++) scanf("%d%d", &a[i].x, &a[i].y);
for (int i = 1; i <= n; i++) for (int j = i+1; j <= n; j++) check(i, j);
f[0][0] = 1;
for (int i = 0; i < bin[n]; i++)
for (int j = 0; j <= n; j++) if (f[i][j])
for (int k = 1; k <= n; k++) if (!(bin[k-1]&i)) {
int x = j, y = k; if (x > y) swap(x, y);
if ((i&mp[x][y]) == mp[x][y]) (f[i|bin[k-1]][k] += f[i][j]) %= yzh;
}
for (int i = 0; i < bin[n]; i++) if (cnt[i] >= 4)
for (int j = 1; j <= n; j++) (ans += f[i][j]) %= yzh;
printf("%d\n", ans);
}
int main() {work(); return 0; }

[CQOI 2018]解锁屏幕的更多相关文章

  1. Loj 2536 解锁屏幕

    Loj 2536 解锁屏幕 状态比较显然的状压 \(dp\) ,设 \(f[S][i]\) 表示连接 \(S\) 集合中的点,最后到的点是 \(i\) 的方案数. 转移时,枚举一个 \(j\notin ...

  2. Activator 通过SSH解锁屏幕等手势操作

    来源:https://qunwang6.github.io/blog/Activator/ Activator 发表于 2015-10-24   |   分类于 iOS Activator Activ ...

  3. bzoj5299: [Cqoi2018]解锁屏幕

    题目链接 bzoj 5299: [Cqoi2018]解锁屏幕 题解 很水的装压dp,相信没人需要看题解.... dp[i][j]表示状态为i最后一个到的点为j,然后转移就很好写了 不过 我读入优化没读 ...

  4. BZOJ5299:[CQOI2018]解锁屏幕(状压DP)

    Description 使用过Android手机的同学一定对手势解锁屏幕不陌生.Android的解锁屏幕由3x3个点组成,手指在屏幕上画一条 线将其中一些点连接起来,即可构成一个解锁图案.如下面三个例 ...

  5. 【BZOJ5299】【CQOI2018】解锁屏幕(动态规划,状态压缩)

    [BZOJ5299][CQOI2018]解锁屏幕(动态规划,状态压缩) 题面 BZOJ 洛谷 Description 使用过Android手机的同学一定对手势解锁屏幕不陌生.Android的解锁屏幕由 ...

  6. [Luogu] P4460 [CQOI2018]解锁屏幕

    题目背景 使用过Android 手机的同学一定对手势解锁屏幕不陌生.Android 的解锁屏幕由3X3 个点组成,手指在屏幕上画一条线,将其中一些点连接起来,即可构成一个解锁图案.如下面三个例子所示: ...

  7. P4460 [CQOI2018]解锁屏幕

    算是我比较擅长的类型,自己想想就会了.普通小状压,状态傻子都能想出来.一开始裸的枚举T了,30.后来与处理之后跑的飞起,就是不对,还是30分.后来看讨论版...mod竟然是1e8+7!!!这不有毒吗. ...

  8. 「杂录」CQOI 2018 背板记

    背景 经过一天天的等待,终于迎来了\(CQOI2018\),想想\(NOIp\)过后到现在,已经有了快要半年了,曾经遥遥无期,没想到时间一转眼就过去了-- 日志 \(Day0\) 因为明天就要考试了, ...

  9. [CQOI 2018]异或序列&[Codeforces 617E]XOR and Favorite Number

    Description 题库链接1 题库链接2 已知一个长度为 \(n\) 的整数数列 \(a_1,a_2,\cdots,a_n\) ,给定查询参数 \(l,r\) ,问在 \([l,r]\) 区间内 ...

随机推荐

  1. [翻译]NUnit---Range and Repeat Attributes(十五)

    RangeAttribute (NUnit 2.5) Range特性用于为参数话测试方法的参数的值范围指定一个值,与Random特性一样,NUnit会将每个参数的值组合为一些了测试用例,所以如果为一个 ...

  2. .net程序中http请求的超时配置

    请求时的超时 // // 摘要: // 获取或设置 System.Net.HttpWebRequest.GetResponse() 和 System.Net.HttpWebRequest.GetReq ...

  3. Good Bye 2017(送命场)

    9815人数场,9500+围观神仙打架...断断续续打Codeforces也快有一年啦,第一次打Good Bye场,满怀前排膜tourist的心愿参加了这场送命场,虽然没看到tourist.不过还是得 ...

  4. Web安全学习图径——系列课程推荐

    本文作者:i春秋作家 大哥哥团长 说到Web安全必须要了解Web方面的一些基础知识做为铺垫的去的去学习这门技术,因为不是人人都可以直接先渗透在进行编程等方面学习的.所以为了更好的入门的Web安全必须要 ...

  5. class字节码结构(二)(访问标志、类索引、父类索引、接口索引集合)

    <Java虚拟机原理图解>1.3.class文件中的访问标志.类索引.父类索引.接口索引集合 字节码总体结构: 访问标志(access_flags)能够表示什么? 访问标志(access_ ...

  6. centos安装 Anaconda3及使用

    下载安装 下载地址https://www.anaconda.com/download/ 旧版本下载https://repo.continuum.io/archive/ 比如下载Anaconda3-4. ...

  7. uiautomatorviewer 双击闪退问题解决

    最近在学习app自动测试,结果在打开uiautomatorviewer查看app界面元素时,就出现了闪退的问题,找了很多很多方法,最后终于可以解决了,详情请继续往下看 首次安装adt的步骤 将下载的压 ...

  8. QuantLib 金融计算——高级话题之模拟跳扩散过程

    目录 QuantLib 金融计算--高级话题之模拟跳扩散过程 跳扩散过程 模拟算法 面临的问题 "脏"的方法 "干净"的方法 实现 示例 参考文献 如果未做特别 ...

  9. Java之集合(十九)LinkedBlockingDeque

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7494577.html 1.前言 本章介绍LinkedBlockingDeque,这是一个可选容量的有界双向链表队 ...

  10. Spring Security构建Rest服务-0701-个性化用户认证流程

    上一篇说了用户认证的基本流程,但是上一篇当访问一个受保护的服务后,如果未认证会调到默认的登录页面,这样是不行的,而且认证成功后,就直接访问了那个服务,如果想要做认证成功后做一些操作,还需要自定义. 个 ...