题意:有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 #270的A题(奇偶法、打表法和Miller_Rabin(这个方法才是重点))

    题目链接:http://codeforces.com/contest/472/problem/A 题目: 题意:哥德巴赫猜想是:一个大于2的素数一定可以表示为两个素数的和.此题则是将其修改为:一个大于 ...

  2. vue数组操作不触发前端重新渲染

    暂时使用给数组先赋值 [ ] ,然后重新赋值的方式解决. 此外,能够监听的数组变异方法 https://cn.vuejs.org/v2/guide/list.html#%E5%8F%98%E5%BC% ...

  3. 设计模式之Factory

    设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) 介绍: Factory Pattern有3种当然是全部是creational pattern. 1.S ...

  4. bzoj 1854 游戏 二分图匹配 || 并查集

    题目链接 Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的 ...

  5. NOIP 2011 Day 1

    NOIP 2011 Day 1 tags: NOIP 搜索 categories: 信息学竞赛 总结 铺地毯 选择客栈 Mayan游戏 铺地毯 Solution 因为只会询问一个点被谁覆盖, 而且后面 ...

  6. XML、java解释XML、XML约束

    1.XML有什么用? (1)可以用来保存数据 (2)可以用来做配置文件 (3)数据传输载体 2.XML格式 XML 元素必须遵循以下命名规则: 名称可以含字母.数字以及其他的字符 名称不能以数字或者标 ...

  7. Git 分支 - 分支的新建

    https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA% ...

  8. hdu 1853(拆点判环+费用流)

    Cyclic Tour Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/65535 K (Java/Others)Total ...

  9. MVC - 12.HtmlHelper

    1.动态生成URL @Url.Action("Index3","Stu3") @Url.RouteUrl("Default2", new { ...

  10. Table上下滚动

    <table> <tr> <td> <div id="marquees"> <!-- 这些是字幕的内容,你可以任意定义 --& ...