map<int, bool> mp;
vector<int> vis;
DLLIMPORT int Rand (int L, int R)
{
double base=((double)rand())/RAND_MAX;
int res=L+(base*(double)(R-L+1));
return res;
}
DLLIMPORT int __stdcall NonRepeatingRandom(int L, int R, bool clear)
{
int cnt=0;
if (clear)
{
for (int i=0; i<vis.size(); i++) mp[vis]=0;
vis.clear();
}
int k=Rand(L, R);
while (mp[k])
{
k=Rand(L, R);
cnt++;
if (cnt>(R-L+1)*10) return -1;
}
mp[k]=1;
vis.push_back(k);
return k;
}
欢迎光临 精易论坛 (https://125.confly.eu.org/) | Powered by Discuz! X3.4 |