#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
struct Node {
double val;
int ran;
char ch;
bool operator < (const Node & rhs) const {
if (val != rhs.val) return val < rhs.val;
else return ran > rhs.ran;
}
Node(double _val, int _ran, char _ch) {
val = _val, ran = _ran, ch = _ch;
}
};
priority_queue<Node> que;
const int maxn = RAND_MAX + 20;
bool vis[maxn];
map<unsigned long long int, bool> mp;
char str[22222];
const int seed = 131;
void show() {
static int f = 0;
if (f < 100) printf("f\n");
else exit(-1);
f++;
}
void work() {
srand(time(NULL));
for (int i = 'a'; i <= 'z'; ++i) {
int ran = rand();
while (vis[ran]) ran = rand();
vis[ran] = true;
que.push(Node(1e18, ran, i));
}
for (int i = '0'; i <= '9'; ++i) {
int ran = rand();
while (vis[ran]) ran = rand();
vis[ran] = true;
que.push(Node(1e18, ran, i));
}
int ansNum, ansLen;
printf("please enter the number for Code : ");
scanf("%d", &ansNum);
printf("please enter the len for Code : ");
scanf("%d", &ansLen);
for (int i = 1; i <= ansNum; ++i) {
unsigned long long int hashVal = 0;
for (int j = 1; j <= ansLen; ++j) {
Node t = que.top();
que.pop();
str[j] = t.ch;
t.val /= 2;
vis[t.ran] = false;
int en = rand();
while (vis[en] == true) {
// show();
en = rand();
// printf("%d\n", en);
}
t.ran = en;
que.push(t);
hashVal = hashVal * seed + t.ch;
}
if (!mp[hashVal]) {
mp[hashVal] = true;
printf("%s\n", str + 1);
} else {
i--;
}
}
}
int main() {
work();
return 0;
}
View Code