用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

uva 350

2013-06-15 作者: 凶残程序员举报

[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;
}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...