foj 2044 1 M possible 二进制压缩
题目链接:
http://acm.fzu.edu.cn/problem.php?pid=2044
题意:
题解:
把一个数分为几位拆开统计,统计完后,把所有的位数都模三,这样剩下的数就为a和b的叠加了,但是信息丢失太多了,没有办法把a,b区分开。
所以我们要多一个维护,在统计一个数对每一位的贡献的时候,同时统计任意两个位的联系的贡献(mp[i][j]++),这样最后把mp所有记录的联系都mod3剩下的就是a,b各自的联系了,这样就区分开了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int mp[][];
int cnt[],pos[],tot;
int main() {
int tc,n,x,a,b,i,j,k,t;
scanf("%d", &tc);
while (tc--) {
memset(cnt, , sizeof(cnt));
memset(mp, , sizeof(mp));
scanf("%d", &n);
for (i = ; i < n; i++) {
scanf("%d", &x);
tot = ;
for (j = ; j < ; j++) {
if (x&( << j)) {
pos[tot++] = j;
cnt[j]++;
}
}
for (j = ; j < tot; j++) {
for (k = j + ; k < tot; k++) {
mp[pos[j]][pos[k]]++;
mp[pos[k]][pos[j]]++;
}
}
}
for (i = ; i < ; i++) cnt[i] %= ;
for (i = ; i < ; i++) {
for (j = ; j < ; j++) {
mp[i][j] %= ;
}
}
a = ;
for (i = ; i < ; i++) {
if (cnt[i]) {
cnt[i]--;
a ^= ( << i);
for (j = ; j < ; j++) {
if (mp[i][j]) {
mp[i][j]--; mp[j][i]--;
cnt[j]--;
a ^= ( << j);
}
}
break;
}
}
b = ;
for (i = ; i < ; i++) {
if (cnt[i]) b ^= ( << i);
}
if (a > b) { t = a; a = b; b = t; }
printf("%d %d\n", a, b);
}
return ;
}
foj 2044 1 M possible 二进制压缩的更多相关文章
- HDU-1074.DoingHomework(撞鸭dp二进制压缩版)
之前做过一道二进制压缩的题目,感觉也不是很难吧,但是由于见少识窄,这道题一看就知道是撞鸭dp,却总是无从下手....最后看了一眼博客,才顿悟,本次做这道题的作用知识让自己更多的认识二进制压缩,并无其它 ...
- poj 3740 Easy Finding 二进制压缩枚举dfs 与 DLX模板详细解析
题目链接:http://poj.org/problem?id=3740 题意: 是否从0,1矩阵中选出若干行,使得新的矩阵每一列有且仅有一个1? 原矩阵N*M $ 1<= N <= 16 ...
- poj1753 Flip Game —— 二进制压缩 + dfs / bfs or 递推
题目链接:http://poj.org/problem?id=1753 Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- Codeforces Round #371 (Div. 2) C. Sonya and Queries —— 二进制压缩
题目链接:http://codeforces.com/contest/714/problem/C C. Sonya and Queries time limit per test 1 second m ...
- UVA690-Pipeline Scheduling(dfs+二进制压缩状态)
Problem UVA690-Pipeline Scheduling Accept:142 Submit:1905 Time Limit: 3000 mSec Problem Descriptio ...
- HDU 1885 Key Task (带门和钥匙的迷宫搜索 bfs+二进制压缩)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1885 Key Task Time Limit: 3000/1000 MS (Java/Others) ...
- Fliptile (dfs+二进制压缩)
Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He ha ...
- POJ-3279.Fliptile(二进制状态压缩 + dfs) 子集生成
昨天晚上12点刷到的这个题,一开始一位是BFS,但是一直没有思路.后来推了一下发现只需要依次枚举第一行的所有翻转状态然后再对每个情况的其它田地翻转进行暴力dfs就可以,但是由于二进制压缩学的不是很透, ...
- poj3254二进制放牛——状态压缩DP
题目:http://poj.org/problem?id=3254 利用二进制压缩状态,每一个整数代表一行的01情况: 注意预处理出二进制表示下没有两个1相邻的数的方法,我的方法(不知为何)错了,看到 ...
随机推荐
- wpf常见枚举收集
Icons made by from www.flaticon.com
- TextField 限定只输入数字的方法
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementStri ...
- pm2 开机自启动如何弄?
1.使用pm2启动node :# pm2 start /home/wwwroot/web.js --watch 2.dump这些进程列表:# pm2 save 3.生成自启动脚本:# pm2 star ...
- yii在TbGridView的td里面加入相应的下拉选项(转)
当你需要在一个GridView渲染某一个复杂元素的时候(特别是在这种情况下,这是一个小部件),这就需要你在控制器中调用一个动作.例如你给一个GridView的定义这样的一列: <?php $th ...
- C-链表的一些基本操作【创建-删除-打印-插入】
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define LEN sizeof(stru ...
- MHA 日常管理
一.MHA的主要脚本 1.manager端 masterha_check_ssh 检查MHA的SSH配置状况 masterha_check_repl 检查MySQL复制状况 masterha_mang ...
- Oracle自用脚本(持续更新)
--查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, ...
- ok6410的madplay配置
二.移植嵌入式播放器 madplay madplay 播放器程序主要依赖于如下库: zlib zlib-1.1.4.tar.gz 提供数据压缩用的函式库 libid3tag libid3tag- ...
- C语言接口的写法(以toyls命令为例)
#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h&g ...
- Linux内核学习笔记——VFS
概念: ①硬链接:若一个 inode 号对应多个文件名,则称这些文件为硬链接.即硬链接就是同一个文件使用了多个别名.硬链接可由命令 link 或 ln 创建. 其特性: 文件有相同的 inode 及 ...