uva 10391(哈希)

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 00:01   316   0

题意:给出一堆单词,输出其中能切开分成两个同样出现在这些单词里的单词,按字典序输出。

题解:先读入,然后按长短排个序,然后在hash()里分出两个子串,判断是否出现过,如果是就放到另一个数组内,最后排序输出。

#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
const int N = 120005;

string s[N], ans[N];
int n;
map<string, int> m;

int cmp (string a, string b) {
 return a.size() < b.size();
}

int hash(string str) {
 m[str] = 1;
 int i, j, k;
 for (i = 1; i < str.size(); i++) {
  string temp1 = "";
  for (j = 0; j < i; j++)
   temp1 += str[j];
  string temp2 = "";
  for (k = j; k < str.size(); k++)
   temp2 += str[k]; 
  if (m[temp1] && m[temp2])
   return 1;
 }
 return 0; 
}

int main() {
 while (cin >> s[n++]) {}
 sort(s, s + n, cmp);
 int num = 0;
 for (int i = 0; i < n; i++) {
  if (hash(s[i]))
   ans[num++] = s[i];
 }
 sort(ans, ans + num);
 for (int i = 0; i < num; i++)
  cout << ans[i] << endl;
 return 0;
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP