bzoj3820 虫逢
Description
Input
Output
Sample Input
H[P,86(^,<n&7x_sg"ly67m2h$n+5'!vhp5ia.@gm:4-njsqsig!h[p,7x_s86(^>aNQ22'B5'!V<fd!f!6xnjsq>!]dHp5I
Sample Output
4
1
2
explanation
输入文件一共有两行。四个基因组分别是
“H[P,”,“86(^”,“,<n&”,“7x_s”,“g"ly”, “67m2”<br="">
“H$n+”,“5'!V”,“Hp5I”,“A.@G”,“M:4-”,“NJsq”
“siG!”,“H[P,”,“7X_S”,“86(^”,“>aNQ”,“22'B”
“5'!V”,“<fd!”,“f!6x”,“njsq”,“>!]d”,“Hp5I”
明显,1、3是同源的,2、4是同源的。
HINT
#include <bits/stdc++.h>
#define il inline
#define RG register
#define ll long long
#define rhl (2573287)
#define M (5000010)
#define N (40010) using namespace std; struct edge{ int nt,to; }g[M];
struct data{ int x,y,z; }q[N]; int a[N][],mt[N],q1[M],q2[M],vis[M],head[rhl],n,m,l,num,cnt,res,flg;
char ch; il int cmp(const data &a,const data &b){
if (a.x==b.x) return a.y<b.y; return a.x<b.x;
} il int insert(RG int to){
RG int from=to%rhl;
for (RG int i=head[from];i;i=g[i].nt) if (g[i].to==to) return i;
g[++num]=(edge){head[from],to},head[from]=num; return num;
} il int eql(RG int x,RG int y){
++flg; RG int mch=;
for (RG int i=;i<=l;++i) vis[a[x][i]]=flg;
for (RG int i=;i<=l;++i) mch+=vis[a[y][i]]==flg;
return mch==(l>>);
} il int solve(){
random_shuffle(q1+,q1+num+),random_shuffle(q2+,q2+num+),cnt=; RG int mch=;
for (RG int i=;i<=n;++i){
if (mt[i]) continue; ++cnt,q[cnt].x=q1[a[i][]],q[cnt].y=q2[a[i][]],q[cnt].z=i;
for (RG int j=;j<=l;++j) q[cnt].x=min(q[cnt].x,q1[a[i][j]]),q[cnt].y=min(q[cnt].y,q2[a[i][j]]);
}
sort(q+,q+cnt+,cmp);
for (RG int i=,j;i<cnt;++i){
if (mt[q[i].z]) continue;
for (j=i;j<cnt && q[j+].x==q[j].x && q[j+].y==q[j].y;++j);
for (RG int u=i;u<j;++u){
if (mt[q[u].z]) continue;
for (RG int v=u+;v<=j;++v)
if (!mt[q[v].z] && eql(q[u].z,q[v].z)){
mt[q[u].z]=q[v].z,mt[q[v].z]=q[u].z,++mch; break;
}
}
}
return mch;
} int main(){
#ifndef ONLINE_JUDGE
freopen("pairing.in","r",stdin);
freopen("pairing.out","w",stdout);
#endif
srand(),cin>>n>>m>>l,n<<=; while (ch<'!') ch=getchar();
for (RG int i=;i<=n;++i)
for (RG int j=,x=;j<=l;++j,x=){
for (RG int k=;k<=;++k,ch=getchar()) x=(x<<)+(int)ch;
a[i][j]=insert(x);
}
for (RG int i=;i<=num;++i) q1[i]=q2[i]=i;
res=n>>; while (res) res-=solve();
for (RG int i=;i<=n;++i) printf("%d\n",mt[i]); return ;
}
bzoj3820 虫逢的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 捉虫记(四)线程安全导致的HighCpu
一个朋友QQ群里说网站启动后会cpu很高,想要帮忙看一下dump. 1.打开windbg加载dump文件后第一个命令lmf,这个命令显示加载的dll以及路径,这样子可以找个dll来帮忙加载sos,(额 ...
- ZT 螨虫知识2
病情分析:过敏是治不好的,只能做到避免接触.指导意见:螨虫的话就不要跟狗多接触,狗的寄生虫很多,还有草地,尤其是狗经常去的地方,草地就是螨虫的传播介质.你是过敏性体质除了被免过敏性源外,还要增强体质, ...
- ZT 螨虫的话就不要跟狗多接触,狗的寄生虫很多,还有草地,
病情分析:过敏是治不好的,只能做到避免接触.指导意见:螨虫的话就不要跟狗多接触,狗的寄生虫很多,还有草地,尤其是狗经常去的地方,草地就是螨虫的传播介质.你是过敏性体质除了被免 过敏性源外,还要增强体质 ...
- python--爬虫入门(八)体验HTMLParser解析网页,网页抓取解析整合练习
python系列均基于python3.4环境 基本概念 html.parser的核心是HTMLParser类.工作的流程是:当你feed给它一个类似HTML格式的字符串时,它会调用goahead方法 ...
- 洛谷 P1092 虫食算 Label:dfs
题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...
- [书]WALL·E、龙与地下铁、中国美丽的故事、故事新编、四十自述、书虫、人工智能、大话数据结构
下午有时间,逛了逛了书城,看到了一些书.在这里总结一些自己的感受. 一.<龙与地下铁> 这本书是我首先看到的,就在靠前的新书区.是小说,我没看里面的内容,但是被书封皮的宣传文案 ...
- PHP里的“夏令虫”
转自:http://www.2cto.com/kf/201308/235073.html 今儿,我遇到一个大怪物 -- 夏令虫 ╮(╯▽╰)╭,学艺不精,因为他掉进大坑里去了.坑是这样挖的: 以前,我 ...
- 使用PHP搭建书虫网站
年前开始了一个新项目,书虫项目的启动,项目组里面我是负责搭建网站的.以前听说过PHP的大名,就是没怎么看过,只能从一无所知开始了. 来自PHP手册的介绍:PHP, 即“PHP: Hypertext P ...
随机推荐
- python 管理多版本之pyenv
一, [root@management ~]# pyenv install -listAvailable versions: 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3 ...
- eclipse中注释快捷键
手动注释: ①类注释:Shift+Alt+J ②方法注释:在方法上方输入/** 后点击回车 自动注释:点击菜单栏上的Window -->Preferences-->Java-->Co ...
- Javaweb三大组件之一 servlet
1.servlet基本使用 注意:单例:init只会执行一次 线程不安全 1.1 创建方式 (1)实现servlet接口[不使用] package cn.getword.servlet; imp ...
- (转)vs2010 vs2013等vs中如何统计整个项目的代码行数
在一个大工程中有很多的源文件和头文件,我如何快速统计总行数? ------解决方案-------------------- b*[^:b#/]+.*$ ^b*[^:b#/]+.*$ ctrl + sh ...
- 【学习笔记】Java实用类:枚举(Enum)
Java API(Java Application Programming Interface)Java应用程序编程接口... 实用类:Java API提供了几个常用包: 1.java.lang:编写 ...
- Android4.4 在Framework新增内部资源编译不过的问题
如果在Frameworks新增内部资源,并在Java代码中使用类似形式来引用资源:com.android.internal.R.layout.xxx,需要在frameworks/base/core/r ...
- python之迭代器
原文 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的gen ...
- 梁宇轩 mysql 语句学习一 对表的操作
1.SHOW TABLES; -- 查询库中所有的表 2 .CREATE TABLE test(id INT(20) PRIMARY KEY NOT NULL AUTO_INCRE ...
- OLEDB 数据变更通知
除了之前介绍的接口,OLEDB还定义了其他一些支持回调的接口,可以异步操作OLEDB对象或者得到一些重要的事件通知,从而使应用程序有机会进行一些必要的处理.其中较有用的就是结果集对象的变更通知接口.通 ...
- 基于CSS3的3D旋转效果
自从有了html5和css3,好多以前只能想想的华丽效果都可以上手实现了.3D 转换(个人认为3D变换更贴切^)就是其中之一.关于3D转换,可以阅读CSS3 3D transform变换,不过如此,文 ...