zoukankan      html  css  js  c++  java
  • poj 2939 Flavius Josephus Reloaded (hash)

    http://poj.org/problem?id=2939
    
    题意:某个人点到两次时这个人自杀,当某个人点到三次时,循环结束,求结束时剩余的人数;
    
    #include<stdio.h>
    #define inf 1000009
    struct node
    {
        __int64 q;
        int  num;
        int  next;
    
    }p[inf];
    int link[inf],m;
    void init()
    {
        for(int  i=0;i<=inf;i++)
        {
            link[i]=0;
    
        }
        m=1;
    
    }
    int  find(__int64 q,int  x)
    {
        int i;
        for(i=link[x];i>0;i=p[i].next)
        {
            if(q==p[i].q)
            {
                p[i].num++;
                return  p[i].num;
            }
        }
    
        return 0;
    }
    void add(__int64 q,int  x)
    {
        p[m].q=q;
        p[m].num=1;
        p[m].next=link[x];
        link[x]=m++;
    }
    int  main()
    {
        int n,a,b;
        while(scanf("%d",&n),n)
        {
            scanf("%d%d",&a,&b);
            init();
            __int64  x=b%n;
            int   ans = 0;
            while(1)
            {
                int temp=find(x,x%inf);
                if(temp==0)
                  add(x,x%inf);
                else
                if(temp==2)ans++;
                else if(temp==3)break;
    
    
                x=(((a*x)%n*x)%n+b)%n;
            }
            printf("%d\n",n-ans);
    
    
        }
    }
    

      

  • 相关阅读:
    2、变量
    1、基本的数据类型
    jenkins入门
    我的Python基础笔记
    jmeter测试手机app
    Python:字典
    Python:元组
    Python:列表
    Python:函数
    H3C-L2TP
  • 原文地址:https://www.cnblogs.com/acSzz/p/2421918.html
Copyright © 2011-2022 走看看