Solution

数据范围疯狂暗示状压,可是一开始发现状态特别难受。

将每一层的奇偶性状压,预处理所有状态的奇偶性。每一层的输入代表的其实可以是下一层某个点可以被从这一层哪些点转移到。

所以枚举每个状态,再枚举下一层转移到哪个点,统计这个点被这个状态更新的话正边和反边分别的奇偶性,转移即可。

第二层和最后一层单独处理即可。

Code

#include<bits/stdc++.h>
#define mod 998244353
using namespace std; int x, dp[][( << )], pre[( << )], up[ << ], dn[ << ];
int m, k; int read () {
int x = , f = ; char c = getchar ();
while (!isdigit (c)) f |= (c == '-'), c = getchar ();
while (isdigit (c)) x = x * + c - '', c = getchar ();
return f ? -x : x;
} void init() {
for(int i = ; i < ( << k); i ++)
pre[i] = (i & ) ^ pre[i >> ];
} int main() {
freopen("adore.in", "r", stdin);
freopen("adore.out", "w", stdout);
scanf("%d%d", &m, &k);
int sta = ;
for(int i = ; i < k; i ++) {
x = read(), sta |= (x << i);
}
dp[][sta] = ; init();
int now = ;
for(int i = ; i < m - ; i ++) {
now ^= ;
memset(dp[now], , sizeof(dp[now]));
memset(up, , sizeof(up));
memset(dn, , sizeof(dn));
for(int u = ; u < k; u ++)
for(int v = ; v < k; v ++) {
x = read();
up[u] |= (x << v);////反边 u能被那些点更新过来
dn[v] |= (x << u);////正边
}
for(int s = ; s < ( << k); s ++)
if(dp[now ^ ][s]) {
int A = , B = ;
for(int j = ; j < k; j ++)
A |= ((pre[s & up[j]]) << j), B |= ((pre[s & dn[j]]) << j);
dp[now][A] = (dp[now][A] + dp[now ^ ][s]) % mod;
dp[now][B] = (dp[now][B] + dp[now ^ ][s]) % mod;
}
}
int st = ;
for(int i = ; i < k; i ++) x = read(), st |= (x << i);
int ans = ;
for(int s = ; s < ( << k); s ++)
if(!pre[st & s]) ans = (ans + dp[now][s]) % mod;
printf("%d", ans);
return ;
}

Solution

!!!原来是有$n+1$排!!是说为什么每次闪退QAQ

其实就是小模拟,直接三层for循环找到答案退出即可QAQ这个复杂度太有欺骗性了!!

其实随机搞更快???

Code

#include<bits/stdc++.h>
using namespace std; int n, t1, t2, num[];
string s;
bitset < > b[]; int main() {
freopen("confess.in", "r", stdin);
freopen("confess.out", "w", stdout);
srand(time());
scanf("%d", &n);
for(int i = ; i <= n; i ++) {
cin >> s;
int len = s.length();
for(int j = ; j < len; j ++) {
int a = s[j] - ;
for(int k = ; k >= ; k --)if(num[i]<(n<<)) b[i][++num[i]] = ((a >> k) & );
}
}
int cnt;
while() {
int i = rand() % (n + );
int j = rand() % (n + );
if(i == j) j ++;
if((b[i] & b[j]).count() >= (n / )) {
if(i > j) swap(i, j);
printf("%d %d", i+, j+); return ;
}
}
printf("NO Solution");
return ;
}

【11.8校内测试】【倒计时2天】【状压DP】【随机化?/暴力小模拟】的更多相关文章

  1. 【模拟8.11】星空(差分转化,状压DP,最短路)

    一道很好的题,综合很多知识点. 首先复习差分:      将原来的每个点a[i]转化为b[i]=a[i]^a[i+1],(如果是求和形式就是b[i]=a[i+1]-a[i]) 我们发现这样的方便在于我 ...

  2. CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  3. 2018.08.29 NOIP模拟 movie(状压dp/随机化贪心)

    [描述] 小石头喜欢看电影,选择有 N 部电影可供选择,每一部电影会在一天的不同时段播 放.他希望连续看 L 分钟的电影.因为电影院是他家开的,所以他可以在一部电影播放过程中任何时间进入或退出,当然他 ...

  4. 6.28 NOI模拟赛 好题 状压dp 随机化

    算是一道比较新颖的题目 尽管好像是两年前的省选模拟赛题目.. 对于20%的分数 可以进行爆搜,对于另外20%的数据 因为k很小所以考虑上状压dp. 观察最后答案是一个连通块 从而可以发现这个连通块必然 ...

  5. 2018.11.02 洛谷P2831 愤怒的小鸟(状压dp)

    传送门 状压一眼题. 直接f[i]f[i]f[i]表示未选择状态为iii时的最小次数. 然后考虑现在怎么转移. 显然可以直接枚举消掉某一个点或者某两个点,复杂度O(n22n)O(n^22^n)O(n2 ...

  6. [CSP-S模拟测试]:点亮(状压DP+树上背包DP)

    题目传送门(内部题121) 输入格式 第一行,一个正整数$n$. 第二行,$n-1$个正整数$p_2,p_3,...,p_n$.保证$p_u$是在$1$到$u-1$中等概率随机选取的. 接下来$n$行 ...

  7. BZOJ 3812 主旋律 (状压DP+容斥) + NOIP模拟赛 巨神兵(obelisk)(状压DP)

    这道题跟另一道题很像,先看看那道题吧 巨神兵(obelisk) 题面 欧贝利斯克的巨神兵很喜欢有向图,有一天他找到了一张nnn个点mmm条边的有向图.欧贝利斯克认为一个没有环的有向图是优美的,请问这张 ...

  8. Light OJ 1011 - Marriage Ceremonies(状压DP)

    题目大意: 有N个男人,和N个女人要互相匹配,每个男人和每个女人有个匹配值. 并且匹配只能是1对1的. 问所有人都匹配完成,最大的匹配值是多少?   状压DP,暴力枚举就OK了, 这个题目略坑,因为他 ...

  9. 状压DP入门详解+题目推荐

    在动态规划的题型中,一般叫什么DP就是怎么DP,状压DP也不例外 所谓状态压缩,一般是通过用01串表示状态,充分利用二进制数的特性,简化计算难度.举个例子,在棋盘上摆放棋子的题目中,我们可以用1表示当 ...

  10. [Luogu P3959] 宝藏 (状压DP+枚举子集)

    题面 传送门:https://www.luogu.org/problemnew/show/P3959 Solution 这道题的是一道很巧妙的状压DP题. 首先,看到数据范围,应该状压DP没错了. 根 ...

随机推荐

  1. mac 报错Root chmod operation not permitted on file

    系统:mac os 10.14.1 重启电脑 mac用户在升级系统之后,电脑启用了SIP(System Integrity Protection),增加了rootless机制,导致即使在root权限下 ...

  2. mysql主从配置 转自http://www.cnblogs.com/sustudy/p/4174189.html

    1.确保主数据库与从数据库一模一样. 例如:主数据库里的a的数据库里有b,c,d表,那从数据库里的就应该有一个模子刻出来的a的数据库和b,c,d表 2.在主数据库上创建同步账号. GRANT REPL ...

  3. 003_饿了么chaosmonkey实现

    背景 公司目前的服务设计大部分满足 design for failure 理念.随着业务复杂度的提升,我们很难再保证对系统故障的容错性.我们需要工具来验证服务的容错性,基于这个需求我们使用了 tc 工 ...

  4. 修改tomcat的server.xml配置web项目

    <!-- VideoWeb:自己编写的web项目名 path:表示当输入访问项目.. 如果path="" URL=localhost:8080就可以访问项目了 如果path= ...

  5. [学习笔记]Java的public,protected,private,缺省的作用域

    0.引言 Java的访问指示符public,protected,private,缺省可以用来修饰类和方法. 1.作用域如下 具体如下: 作用域       当前类    同一package   子孙类 ...

  6. Android学习笔记————利用JDBC连接服务器数据库

    /******************************************************************************************** * auth ...

  7. Oracle数据库常用Sql语句大全

    一,数据控制语句 (DML) 部分 1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSE ...

  8. ES6 模块与 CommonJS 模块的差异

    ES6 模块与 CommonJS 模块完全不同.它们有两个重大差异 CommonJS 输出是值的拷贝,即原来模块中的值改变不会影响已经加载的该值,ES6静态分析,动态引用,输出的是值的引用,值改变,引 ...

  9. js面向对象 下

    // 声明对象的方法 一  (通过常量直接赋值) var xiaoming = {//声明一个对象(直接通过一个常量xiaoming用{}赋值的方式声明) name: '小明', //对象的一个属性 ...

  10. PyCharm更改字体和界面样式

    更改主题 File → Settings → Appearance & Behavior → Appearance → Theme 结果: 更改字体大小 File → Settings → E ...