Oier们的镜子(mirror)
题解:
这题真是把我坑的很惨。。
题目看了很久才看懂。。
然后刚开始又没看见每个只能匹配一个这种条件
#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
const int N=;
const int N2=<<;
int n,f[N][N2],g[N2],q[N],C[][],a[N];
const int mo=;
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n;
rep(i,,n) cin>>a[i];
sort(a+,a+n+);
int lst=;
rep(i,,)
rep(j,,i)
if (j==i||j==) C[i][j]=;
else C[i][j]=C[i-][j]+C[i-][j-];
f[][]=;
rep(i,,n)
{
if (a[i]==a[i+]) continue;
rep(k,,i-lst)
{
rint now=;
rep(j,,k)
now^=<<(i-j);
rint l=(<<lst)-;
rep(j,,l)
if (f[lst][j])
{
int ans1=C[i-lst][k];
int cnt=,ans=;
rep(k,,lst-) if ((j>>k)&) q[++cnt]=k+;
int l2=(<<cnt)-,cnt2=,num=;
rep(k1,,l2)
{
if (k1>>(cnt2+)) cnt2++;
g[k1]=g[k1^(<<cnt2)]+a[q[cnt2+]];
if (g[k1]==a[i]) num++;
}
ans1=1ll*ans1*f[lst][j]%mo;
ans=1ll*(num+k)%mo;
rep(p,,i-lst-k) ans1=1ll*ans1*ans%mo;
f[i][j^now]=ans1;
}
}
lst=i;
}
int ans=;
rep(i,,(<<n)-)
ans=(ans+f[n][i])%mo;
cout<<ans<<endl;
return ;
}
然后又思考怎么处理相同元素思考了比较久
我自己写了一种特判相同元素的方法。。。非常复杂。。。(还是看错题目的),之后就没改了
大致就是枚举这些元素里哪些是镜子,哪些是由东西组合的,然后再乘组合数再乱搞。。
首先这道题目状压dp是比较显然的
排序也是比较显然的
然后唯一的问题在于相同元素怎么办
有一个非常巧妙的办法就是
当f[i][j]通过相同元素转移,那么要把这个东西乘二
为什么呢,我们可以这么理解,如果你要把右边的那个东西当镜子,左边的当元素
那么和左边当镜子,右边当元素方案数是等价的
因为由于这道题的特性每个元素只能对应一个,所以对于这两个元素,有关联的只有互相
// luogu-judger-enable-o2
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define rint register int
#define IL inline
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
#define lowbit(x) (x&(-x))
const int N=;
const int N2=<<;
int n,a[N],b[N2],sum[N2],f[N][N2];
const int mo=1e9+;
void js(int &x,int y)
{
x+=y;
x%=mo;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
rep(i,,n) cin>>a[i];
sort(a+,a+n+);
rep(i,,n) b[<<(i-)]=a[i];
int l=(<<n)-;
f[][]=;
rep(i,,l) sum[i]=sum[i-lowbit(i)]+b[lowbit(i)];
rep(i,,n)
{
rep(j,,l)
if (f[i-][j])
{
js(f[i][j|(<<(i-))],f[i-][j]);
for(rint k=j;k;k=(k-)&j)
if (sum[k]==a[i])
{
js(f[i][j^k],f[i-][j]);
if (!(k-lowbit(k))) js(f[i][j^k],f[i-][j]);
}
}
}
int ans=;
rep(i,,l) js(ans,f[n][i]);
cout<<ans<<endl;
return ;
}
同学给了我一种新的方法。。
我们可以比较暴力的做
每次枚举一个数,然后枚举子集可以用哪些东西构成
记录一下用了几组,最后除掉就行了
7*3^n并不能过
然后可以用fwt优化
Oier们的镜子(mirror)的更多相关文章
- English trip M1 - AC3 Teacher:Corrine
课堂上内容 16,black,games The clothes is Only $. is lucky number in China. God give us black eyes,but we ...
- websocket可以做什么
本篇介绍的是websocket,但是并不介绍它的协议格式,一般能看明白http头也能明白websocket在协议切换前的协商,能看明白IP报头也就对websocket在协议切换后通讯格式不陌生.web ...
- [codeforces 241]C. Mirror Box
[codeforces 241]C. Mirror Box 试题描述 Mirror Box is a name of a popular game in the Iranian National Am ...
- 几何入门合集 gym101968 problem F. Mirror + gym102082 Problem F Fair Chocolate-Cutting + gym101915 problem B. Ali and Wi-Fi
abstract: V const & a 加速 F. Mirror 题意 链接 问题: 有n个人在y=0的平面上(及xoz平面).z=0平面上有一面镜子(边平行于坐标轴).z=a平面上有q个 ...
- 「HDU - 2857」Mirror and Light(点关于直线的对称点)
题目链接 Mirror and Light 题意 一条直线代表镜子,一个入射光线上的点,一个反射光线上的点,求反射点.(都在一个二维平面内) 题解 找出入射光线关于镜子直线的对称点,然后和反射光线连边 ...
- Unity镜子效果的实现(无需镜子Shader)
Unity镜子效果制作教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- 【Unity Shader】(九) ------ 高级纹理之渲染纹理及镜子与玻璃效果的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...
- 牛客寒假5-I.炫酷镜子
链接:https://ac.nowcoder.com/acm/contest/331/I 题意: 小希拿到了一个镜子块,镜子块可以视为一个N x M的方格图,里面每个格子仅可能安装`\`或者`/`的镜 ...
- 【论文阅读】Where Is My Mirror?
Where Is My Mirror?(ICCV2019收录) 作者: 论文链接: https://arxiv.org/pdf/1908.09101.pdf 1. 研究背景 目前存在的计算机视觉任务 ...
随机推荐
- win10安装MarkdownPad 2报错This view has crashed的处理及md简单语法
# #开头是段落的意思 不带#号是普通内容 # 下划线的写法是两个#号 ## # 列表的写法,以*号开头 * spring * summer * autumn * winter # 以竖线开头 > ...
- gcc/g++基本命令
gcc & g++现在是gnu中最主要和最流行的c & c++编译器 .g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c.这时候命令换做gcc即可.其实是无关紧要的.其 ...
- 常见的SQL调优(SQL Tuning)Tips
建立适当的索引(参考<正确建立数据库索引的姿势>) 用UNION替换OR (适用于索引列) 用exist.not exist代替 in.not in 不要以字符格式声明数字(会 ...
- BeautifulSoup解析器的选择
BeautifulSoup解析器 在我们使用BeautifulSoup的时候,选择怎样的解析器是至关重要的.使用不同的解析器有可能会出现不同的结果! 今天遇到一个坑,在解析某html的时候.使用htm ...
- centos6.5安装python2.7、pip、numpy、scipy
1..安装Development Tools yum groupinstall -y 'development tools' 2.安装SSL.bz2.zlib来为Python的安装做好准备工作 yum ...
- java基础题刷题中的知识点复习
将变量转换为字符串方法:(String)待转对象..toString().String.valueOf(待转对象) 对字符串进行操作的方法,使用StringBuffer和StringBuilder定义 ...
- Oracle 中 nvl、nvl2、nullif、coalesce、decode 函数的用法详解
NVL(EXPR1,EXPR2) NVL2(EXPR1,EXPR2,EXPR3) NULLIF(EXPR1,EXPR2) COALESCE(EXPR1,,..,EXPRn) decode ------ ...
- ios消息机制
ios消息机制介绍 ios 调用每一个方法的时候其实是走的ios的消息机制 举例介绍一下 创建一个Pserson类 有一个eat 对象方法 那么下面的代码可以用消息机制实现 导入消息头文件 # ...
- SpringBoot集成多数据源
多数据源就是连接多个数据库 1.在application.properties中配置两个数据库 spring.datasource.driverClassName=com.mysql.jdbc.Dri ...
- 使用Eclipse、Tomcat遇到的一些问题
Tomcat服务无法启动 前两天瞎搞,试着弄了弄Android的环境.结果不知道动了什么地方,Tomcat崩了,本地打开localhost:8080一直显示404,eclipse也无法使用Tomcat ...