photo

小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左航行,有的船只向右航行。小明希望拍下这一美丽的风景,并且把尽可能多的船只都完整地拍到一张照片中。

小明位于河的边上,并且可以在河边的任意位置进行拍照,照相机的视野恰好为\(90\)度角,只能以垂直于河边的方向进行拍照。河上的船只全都可看作是平行于河边的一条线段,有的正在向左移动,有的正在向右移动,但移动速度恰好都是一样的。

小明可以等待恰当的时间让尽量多的船只都走进照相机的视野里,你不需要考虑船只之间会互相遮挡视野的情况。

首先,只用枚举能看到船沿的观察者(收缩法)

然后,处理出所有观察者的位置。看左右两个观察者能否合并在一起即可。

#include <cstdio>
#include <algorithm>
using namespace std; const int maxn=2e5+5;
int n, cl, cr; //m[0/1]:向左/右的差分标记 p:观察者位置
struct mark{
int pos, v;
mark(int x=0, int y=0){ pos=x; v=y; }
}m[2][maxn];
bool cmp(const mark &a, const mark &b){ return a.pos<b.pos; }
int p[maxn], cntp, l[maxn], r[maxn], a[maxn]; //l/r:这个观察者能看到多少个往左/往右的
int main(){
scanf("%d", &n); int x, y, z, d;
for (int i=1; i<=n; ++i){
scanf("%d%d%d%d", &x, &y, &z, &d);
if (y-x>2*z) continue; //直接忽略不可能看见的船
p[cntp++]=x+z; p[cntp++]=y-z; //观察者的可能位置
//在此区域内的观察者能看到向0/1行驶的这艘船
if (d==-1){ m[0][cl++]=mark(y-z, 1), m[0][cl++]=mark(x+z+1, -1); }
else{ m[1][cr++]=mark(y-z, 1), m[1][cr++]=mark(x+z+1, -1); }
}
sort(p, p+cntp); sort(m[0], m[0]+cl, cmp); sort(m[1], m[1]+cr, cmp);
int t=0, now=0;
for (int i=0; i<cntp; ++i){ //当前观察者能看到几艘向左的船
while (m[0][t].pos<=p[i]&&t<cl) now+=m[0][t++].v;
l[i]=now; }
t=0; now=0;
for (int i=0; i<cntp; ++i){ //当前观察者能看到几艘向右的船
while (m[1][t].pos<=p[i]&&t<cr) now+=m[1][t++].v;
r[i]=now; }
a[0]=r[0]; int ans=0; //a表示前缀最大值
for (int i=1; i<cntp; ++i) a[i]=max(a[i-1], r[i]);
//for (int i=0; i<cntp; ++i) printf("%d\n", a[i]);
for (int i=1; i<cntp; ++i) ans=max(ans, l[i]+a[i-1]); //左右合成
printf("%d\n", ans);
return 0;
}

graph

有一张无自环无重边的无向图,求有多少个边集,使得删掉边集里的边后,图里恰好有K个连通块。

用\(f[S][j]\),表示S集合分成j个连通块有多少种边集。为了去重,锁定一个点p,设\(S_p\subset S,p \in S_p\),那么\(f[S][j]+=f[S-S_p][j-1]*f[S_p][1]\)。

#include <cstdio>
using namespace std;
#define popc __builtin_popcount
#define lowbit __builtin_ctz typedef long long LL;
const int maxn=15, mod=1e9+9;
int n, m, k, pw2[maxn*maxn], G[maxn][maxn], in[1<<maxn];
LL f[1<<maxn][maxn];
int main(){
pw2[0]=1;
for (int i=1; i<maxn*maxn; ++i) pw2[i]=pw2[i-1]*2%mod;
scanf("%d%d%d", &n, &m, &k); int x, y, v;
for (int i=1; i<=m; ++i){
scanf("%d%d", &x, &y); --x; --y; G[x][y]=G[y][x]=1; }
for (int i=1; i<1<<n; ++i) if (popc(i)>1){
v=lowbit(i);
in[i]=in[i^(1<<v)];
for (int j=0; j<n; ++j)
if (G[v][j]&&(i&(1<<j))) ++in[i];
//printf("%d %d %d %d\n", i, v, in[i^(1<<v)], in[i]);
}
for (int i=1; i<1<<n; ++i) if (popc(i)>1){
f[i][1]=pw2[in[i]];
for (int j=popc(i); j>1; --j){ //切成几个连通块
int v=lowbit(i), k=i^(1<<v), r=i^(1<<v);
do{ //枚举子连通块
f[i][j]=(f[i][j]+f[1<<v|k][1]*f[r^k][j-1])%mod;
k=k-1&r;
}while(k!=r);
f[i][1]-=f[i][j];
}
f[i][1]=f[i][1]%mod+(f[i][1]>>63&mod);
} else f[i][1]=1;
printf("%lld\n", f[(1<<n)-1][k]);
return 0;
}

STR[#6]的更多相关文章

  1. [转]Python中的str与unicode处理方法

    早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...

  2. python中的str,unicode和gb2312

    实例1: v1=u '好神奇的问题!?' type(v1)->unicode v1.decode("utf-8")# not work,because v1 is unico ...

  3. LDR、STR指令

    LDR(load register)指令将内存内容加载入通用寄存器 STR(store register)指令将寄存器内容存入内存空间中 #define GPJ0CON 0xE0200240 _sta ...

  4. Python之str()与repr()的区别

    Python之str()与repr()的区别 str()一般是将数值转成字符串,主要面向用户.  repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思.如list, ...

  5. 判断一个字符串str不为空的方法

    1.str == null; 2."".equals(str); 3.str.length 4.str.isEmpty(); 注意:length是属性,一般集合类对象拥有的属性,取 ...

  6. python 3.5: TypeError: a bytes-like object is required, not 'str'

    出现该错误往往是通过open()函数打开文本文件时,使用了'rb'属性,如:fileHandle=open(filename,'rb'),则此时是通过二进制方式打开文件的,所以在后面处理时如果使用了s ...

  7. django 在字符串[str(list)]中精确查找

    1.问题描述 1.1表结构 1.2问题 ref_list为id列表的字符串,需要从ref_list中找出包含指定id的数据(eg id=8).如果实用models.objects.filter(ref ...

  8. Python基本数据类型——str

    字符串常用操作 移除空白 分割 长度 索引 切片 class str(basestring): """ str(object='') -> string Retur ...

  9. Python_Day_02 str内部方法总结

    刚开始学习Python,看了一天的字符串内部方法,现在来总结一下. capitalize(self) 将一句话的首字母变大写,其他字母都变小 name = "love PyThon" ...

  10. Python字符串str的方法使用

    #!usr/bin/env python# -*-coding:utf-8-*-#字符串通常用双引号或单引号来表示:'123',"abc","字符串"#str字 ...

随机推荐

  1. Lenovo SplitScreen联想分屏软件只能在联想电脑运行,如何破解

    1.正常安装软件,重启电脑. 2.打开安装目录 C:\Program Files\Lenovo\Lenovo SplitScreen\SplitScreen 找到 MachineChecker.dll ...

  2. ShadowVolume

    [ShadowVolume] 1.z-pass 算法. z-pass 是 shadow volume 一开始的标准算法,用来确定某一个象素是否处于阴影当中.其原理是: Pass1:enable z-b ...

  3. cdoj1091-秋实大哥の恋爱物语 【kmp】

    http://acm.uestc.edu.cn/#/problem/show/1091 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others)     Memo ...

  4. 【ZOJ 3228】Searching the String 【AC自动机】

    题意 给出n个模式串和一个文本串,输出各个模式串在文本串中出现的次数.模式串有两种类型,0类型代表可以有重叠,1类型代表不能有重叠.模式串可能出现重复. 分析 算是AC自动机的模板题? 因为模式串可以 ...

  5. [hdu2665]Kth number(划分树求区间第k大)

    解题关键:划分树模板题. #include<cstdio> #include<cstring> #include<algorithm> #include<cs ...

  6. 高性能Web服务器Nginx的配置与部署研究(10)核心模块之HTTP模块Location相关指令

    一.基本语法 语法:location [= | ~ | ~* | ^~] </uri/> {...} 缺省:N/A 作用域:server 二.匹配规则 1. 四种匹配方式 = 精确匹配 ~ ...

  7. vi/vim 消除搜索后的关键字高亮

    使用vi或vim命令搜索某个关键字之后,取消高亮显示的方法 只要输入:noh即可

  8. ETC系统简介

    ETC:电子不停车系统 主要由两部分构成:OBU(车载单元,又叫电子标签)和RSU(路基单元,包括天线) 其中OBU里插有用户卡(一般是和银行联名发行的信用卡) 而RSU包括路基天线,PSAM卡,通过 ...

  9. mysql 数学操作函数

    -- 绝对值,圆周率 SELECT ABS(-1),3*PI() -- 平方根,求余 SELECT SQRT(9),MOD(9,5) -- 获取整数的函数 SELECT CEIL(12.145),CE ...

  10. [干货来袭]C#7.0新特性(VS2017可用)(转)

    出处:http://www.cnblogs.com/GuZhenYin/p/6526041.html 微软昨天发布了新的VS 2017 ..随之而来的还有很多很多东西... .NET新版本 ASP.N ...