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。。
比较坑的题目。
只需要按照字符串排序。 然后枚举所有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; }
相关文章推荐
- sgu 552 Database Optimization
- SGU 552 Database optimization
- SGU 169 Numbers (数学推理)
- SGU_390_Tickets(另类数位DP)
- 概率与期望 SGU 495 Kids and Prizes
- SGU 106 The equation 扩展欧几里德
- SGU 210 Beloved Sons (KM)
- BZOJ1478 Sgu282 Isomorphism
- 数论 - SGU 107 987654321 problem
- SGU 4554 Boring Game 来自队友的神奇随机Hash
- (sgu-344)Weed
- SGU 495 Kids and Prizes (概率期望DP)
- sgu185Two shortest 最短路+网络流+输出路径
- SGU 275 - To xor or not to xor 按位贪心 线性基
- To xor or not to xor SGU - 275 gauss
- SGU 417. Heavy Disc(水题)
- SGU 194. Reactor Cooling
- SGU 137 Funny Strings(构造)
- [SGU 223]Little Kings(状压DP)
- SGU 108 Self-numbers II