关于一种全新排序算法
  • 板块灌水区
  • 楼主wcyQwQ
  • 当前回复18
  • 已保存回复18
  • 发布时间2022/7/12 20:43
  • 上次更新2023/10/27 20:46:56
查看原帖
关于一种全新排序算法
587248
wcyQwQ楼主2022/7/12 20:43

就是把数组里面的所有数都插入一个Trie中,然后遍历Trie即可,这种做法在P1177中好像跑得比sort快,但是值域大一点就不如nlogn算法,(还可以拓展到负数,但是我太菜了懒得写) 下面是P1177的代码

#include <bits/stdc++.h>

using namespace std;
const int N = 1e5 + 10, M = 15;
int t[N * M][10], belong[N * M], cnt[N * M], idx;
char s[N][M];

inline void insert(int id)
{
	int p = 0, l = strlen(s[id] + 1);
	for (int i = 1; i <= 10; i++)
	{
		int c = i < (10 - l + 1) ? 0 : s[id][i + l - 10] - '0';
		if (!t[p][c]) t[p][c] = ++idx;
		p = t[p][c];
	}
	belong[p] = id;
	cnt[p]++;
}

inline void dfs(int u)
{
	if (belong[u])
	{
		for (int i = 1; i <= cnt[u]; i++)
			printf("%s ", s[belong[u]] + 1);
		return;
	}
	for (int i = 0; i <= 9; i++)
		if (t[u][i])
			dfs(t[u][i]);
}

int main()
{
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		scanf("%s", s[i] + 1);
		insert(i);
	}
	dfs(0);
	return 0;
}
2022/7/12 20:43
加载中...