题意:有n群人,每个人有喜欢的汉堡配方;有m家店,给出每家店的每个汉堡的配方,如果存在某个汉堡,其配料表包含某个人喜欢的配方,则这个人喜欢这个汉堡所在的店家。问你对每群人,输出被喜欢的人数最多的店面是哪家。

直接把每家店所能满足的口味表全塞到哈希表里面,暴力枚举统计即可。

这里用了双关键字哈希表,比较巧妙,是绝对的O(1)。

#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
struct Man{
int S;
bool like[1005];
Man(const int &S){this->S=S;memset(like,0,sizeof(like));};
Man(){};
};
typedef vector<Man>::iterator ITER;
//5000011
//4000037
vector<Man>v[1005];
int n,m;
int pp,st[2][3200033];
int b[1005];
struct HashTable
{
bool a[5000011],b[4000037];
HashTable(){}
void clear(){
for(int i=1;i<=pp;++i){
a[st[0][i]]=b[st[1][i]]=0;
}
pp=0;
}
void insert(const int &V){
int U1=V%5000011;
a[U1]=1;
int U2=V%4000037;
b[U2]=1;
st[0][++pp]=U1;
st[1][pp]=U2;
}
bool find(const int &V){
return (a[V%5000011] && b[V%4000037]);
}
}T;
char s[105];
int len,S;
void dfs(int cur,int dep,int Snow){
if(dep!=0){
T.insert(Snow);
}
for(int i=cur;i<len;++i){
dfs(i+1,dep+1,Snow|(1<<(s[i]-'a')));
}
}
int main(){
// freopen("h.in","r",stdin);
int x;
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&x);
for(int j=1;j<=x;++j){
scanf("%s",s);
len=strlen(s),S=0;
for(int k=0;k<len;++k){
S|=(1<<(s[k]-'a'));
}
v[i].push_back(Man(S));
}
}
scanf("%d",&m);
for(int i=1;i<=m;++i){
scanf("%d",&x);
for(int j=1;j<=x;++j){
scanf("%s",s);
len=strlen(s);
dfs(0,0,0);
}
for(int j=1;j<=n;++j){
for(ITER it=v[j].begin();it!=v[j].end();++it){
if(T.find(it->S)){
it->like[i]=1;
}
}
}
T.clear();
}
for(int i=1;i<=n;++i){
memset(b,0,sizeof(b));
for(ITER it=v[i].begin();it!=v[i].end();++it){
for(int j=1;j<=m;++j){
if(it->like[j]){
++b[j];
}
}
}
int id=1;
for(int j=2;j<=m;++j){
if(b[j]>b[id]){
id=j;
}
}
printf("%d\n",id);
}
return 0;
}

【哈希表】Ural Championship April 30, 2017 Problem H. Hamburgers的更多相关文章

  1. 【构造】Ural Championship April 30, 2017 Problem K. King’s island

    题意:让你构造一个n个点的简单多边形,使得所有点是整点,并且所有边长是整数,并且没有边平行于坐标轴. 就利用勾股数,如下图这样构造即可,n为偶数时,只需矩形拼成,n为奇数时,封上虚线边即可. #inc ...

  2. 【折半枚举】Ural Championship April 30, 2017 Problem G. Glasses with solutions

    题意:有n杯盐溶液,给定每杯里面盐的质量以及盐溶液的质量.问你有多少种方案选择一个子集,使得集合里面的盐溶液倒到一个被子里面以后,浓度为A/B. 折半枚举,暴力搜索分界线一侧的答案数,跨越分界线的答案 ...

  3. 【二分】【字符串哈希】【二分图最大匹配】【最大流】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem I. Minimum Prefix

    给你n个字符串,问你最小的长度的前缀,使得每个字符串任意循环滑动之后,这些前缀都两两不同. 二分答案mid之后,将每个字符串长度为mid的循环子串都哈希出来,相当于对每个字符串,找一个与其他字符串所选 ...

  4. 【DFS】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem D. Divisibility Game

    题意:给你一个序列,长度不超过52,每个元素不超过13.让你重新对这个序列排序,sum(i)表示i的前缀和,使得排序过后,对每个i,都有sum(i)%i==0. 深搜,加两个优化:①倒着从后向前搜:② ...

  5. 【二分】【三分】【计算几何】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem L. Lines and Polygon

    题意:给你一个凸多边形,和多次询问,每次询问给你一条直线,问你这条直线与凸包上的顶点的最近距离是多少. 记当前询问的直线的斜率为K, 先找到与这条直线距离最远的两个点: 就把凸包所有的边当做有向直线进 ...

  6. 【线段树】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem J. Jedi Training

    题意:给你一个序列,支持两种操作:单点修改:询问一个区间中所有相邻位置下标奇偶性均不同的子序列中,和最大的是多少. 线段树每个结点维护四个值: 以奇数下标开始到奇数下标结束的最大子序列和: 以偶数下标 ...

  7. 【贪心】【后缀自动机】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem E. Enter the Word

    题意:给你一个串,让你从左到右构造这个串,一次操作可以直接在当前串后面添加一个任意字符,或者拷贝当前串的任意一个子串到当前串的后面.问你最少要多少次操作才能构造出这个串. 从前向后贪心,从当前已构造的 ...

  8. April 30 2017 Week 18 Sunday

    Our lives stretched out ahead of us, like a perpetual sunrise. 生命如永恒的日出,生生不息. Please respect yoursel ...

  9. 【找规律】【DFS】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem A. Arithmetic Derivative

    假设一个数有n个质因子a1,a2,..,an,那么n'=Σ(a1*a2*...*an)/ai. 打个表出来,发现一个数x,如果x'=Kx,那么x一定由K个“基础因子”组成. 这些基础因子是2^2,3^ ...

随机推荐

  1. Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!]

    题目链接:http://codeforces.com/contest/984 A. Game time limit per test:2 seconds memory limit per test:5 ...

  2. HDU 2899 三分

    我们对这个函数求二阶导数,发现他的二阶导数是恒大于0的,那么他的导数是单调的,且在某时刻为0,那么这时的x值就是极值处的x值,其实题目说了,有最小值,那么我们三分水过去就好了. 反思:精度不够,因为是 ...

  3. 变量对象vs活动对象

    这是我见过描述的最为详尽的关于变量对象.活动对象以及闭包的解析,来自知乎,感谢答主: 作者:闭家锁链接:https://www.zhihu.com/question/36393048/answer/7 ...

  4. netlink socket编程

    转载 原文地址:netlink socket编程之why & how (转) 作者:renyuan000 作者: Kevin Kaichuan He@2005-1-5 翻译整理:duanjig ...

  5. 如何更新远程主机上的 Linux 内核

    如何更新远程主机上的 Linux 内核 http://blog.csdn.net/robertsong2004/article/details/47277121 转载至:http://www.tiny ...

  6. HDU 6109 数据分割 并查集,SET

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6109 题意:中文题面 解法:每次都贪心地尝试将尽量多的条件放进当前这组,遇到第一个与已有条件冲突时,就 ...

  7. HDU-5281

    Senior's Gun Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  8. selenium 参数传递(testng.xml 、DataProvider )

    为了方便测试代码的复用性,常常采用参数化.传递参数给测试代码 有一下两种方法:1.通过配置XML文件实现.2.通过DataProvider 传递参数. 注意:DataProvider 传递参数返回的是 ...

  9. 一:Storm集群环境搭建

    第一:storm集群环境准备及部署[1]硬件环境准备--->机器数量>=3--->网卡>=1--->内存:尽可能大--->硬盘:无额外需求[2]软件环境准备---& ...

  10. 为什么很多国内公司不使用 jQuery 等开源 JS 框架(库),而选择自己开发 JavaScript 框架?

    http://www.zhihu.com/question/20099586/answer/13971670 我对公司JAVASCRIPT框架的定位思考: