您的位置:首页 > 其它

随机生成字符串

2017-10-20 11:55 113 查看
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: