您的位置:首页 > 运维架构

SGU 552 - Database optimization

2012-11-06 20:14 411 查看
题目地址:http://acm.sgu.ru/problem.php?contest=0&problem=551

比较坑的题目。

只需要按照字符串排序。 然后枚举所有key的组合情况,把多个字符串拼接成一个长字符串,然后map++。

一开始觉得map花费的时间太高,所以我用的是字典树记录,结果爆内存,MLE到屎。。。 空间复杂度算搓了。

比赛结束之后也没过。 后来问phk,发现他就是用map过的。。。

好吧,map空间确实少。。。 重新写了一下,10分钟就敲完了。。 1A。。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>
#include<string>
using namespace std;

map<string,int>mp;

string s[4];
int rec[5];

void mj(int k)
{
int i,j,e,n;
string tmp;
n=1<<k;
for(i=1;i<n;i++)
{
tmp="";
for(j=0;j<k;j++)
{
if(i&(1<<j))
{
tmp=tmp+s[j]+"+";
}
}
mp[tmp]++;
}
}

int main()
{
int i,n,k;
string tmp;
cin>>n;
while(n--)
{
cin>>k;
for(i=0;i<k;i++)
{
cin>>s[i];
}
sort(s,s+k);
mj(k);
}
cin>>n;
while(n--)
{
cin>>k;
tmp="";
for(i=0;i<k;i++)
{
cin>>s[i];
}
sort(s,s+k);
for(i=0;i<k;i++)
{
tmp=tmp+s[i]+"+";
}
printf("%d\n",mp[tmp]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: