sgu 552 Database optimization (Map)

来源:互联网 发布:数据科学入门 pdf下载 编辑:程序博客网 时间:2024/06/09 15:05

思路:

map的使用,这里枚举每种组合的时候用位运算,二进制的1标记使用这个数,0标记不使用。

代码:

#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<map>#include<string>using namespace std;map<string,int>mp;int n , m;string s[5];void f(int k){    string tmp = "";    int n = 1 << k ;    for(int i = 1 ; i < n ; i ++){            tmp = "";            for(int j = 0  ; j < k ; j ++){                if(i & (1 << j)){                    tmp += s[j] + "+";                }            }            mp[tmp] ++;            //cout << tmp << endl;        }    return ;}int main(){    string tmp;    int k;    char temp[20];    scanf("%d" , &n);    while(n --){        scanf("%d" , &k);        for(int i = 0 ; i < k ; i ++){            scanf("%s" , temp);            s[i] = temp;        }        sort(s , s + k);        f(k);    }    scanf("%d" , &n);    while(n --){        tmp = "";        scanf("%d" , &k);        for(int i = 0 ; i < k ; i ++){            scanf("%s" , temp);            s[i] = temp;        }        sort(s , s + k);        for(int i = 0 ; i < k ; i ++){tmp = tmp + s[i] + "+";}//cout << "ttmp = " + tmp << endl;printf("%d\n",mp[tmp]);    }    return 0;}