[c]代码库
#include <cstdio>
using namespace std;
const int maxn = 65535;
struct hash_tag
{
int key, num, next;
}hash[maxn<<1];
int flag[maxn], idx, top;
void insert(int n, int num)
{
int k = (n&65535);
if (flag[k]!=idx)
{
flag[k] = idx;
hash[k].key = n;
hash[k].num = num;
hash[k].next = -1;
return;
}
while (hash[k].next != -1)
{
if (hash[k].key == n) return;
k = hash[k].next;
}
hash[k].next = ++top;
hash[top].key = n;
hash[top].num = num;
hash[top].next = -1;
}
int find(int n)
{
int k = (n&65535);
if (flag[k]!=idx)
{
return -1;
}
while (k!=-1)
{
if (hash[k].key == n) return hash[k].num;
k = hash[k].next;
}
return -1;
}
//map, set, hash_set, hash_map
int main()
{
int Z = 0, I = 0, M = 0, L = 0;
int t = 0;
while (scanf("%d%d%d%d", &Z, &I, &M, &L)==4)
{
if (Z == 0&&I == 0&&M== 0&&L == 0) break;
int count = 0, temp;
top = maxn;idx++;
t++;
L = (Z*L+I)%M;
while ((temp=find(L)) == -1)
{
insert(L, ++count);
L = (Z*L+I)%M;
}
printf("Case %d: %d\n", t, count-temp+1);
}
return 0;
}
by: 发表于:2017-08-11 10:10:12 顶(0) | 踩(0) 回复
??
回复评论