zoukankan      html  css  js  c++  java
  • 1014 Uniform Generator ACM

    http://acm.hdu.edu.cn/showproblem.php?pid=1014

    题目的英文实在是太多了 ,搞不懂。

    最后才知道是用公式seed(x+1) = [seed(x) + STEP] % MOD 来计算随机数 ,问是否满足随机数。

    初级版本:

    思路:把所有的用该公式计算出来的数(存在数组中)都遍历出来,然后排序。由于数字是在0 到mod-1 之间,所以数组的下标必然等于数组的值,有一个不等于,就是bad chioce

    #include <stdio.h>
    #include <stdlib.h>
    int cmp ( const void *p1 , const void *p2 )
    {
        return *( int * )p1 - *( int * )p2 ;
    }
    int main ( )
    {
        int step , mod ;
        while ( (scanf("%d %d",&step , &mod ) ) != EOF )
        {
            int i , seed[ 100001 ] = { 0 } ;
            seed[ 0 ] = 0 ;
            for ( i = 1 ; i < mod ; i ++ )
                seed[ i ] = ( seed[ i-1 ] + step ) % mod ;
    
            qsort( seed , mod , sizeof ( int ) , cmp ) ;
            for ( i = 0 ; i < mod ; i ++ )
                if ( seed[ i ] != i )
                    break ;
            if ( i != mod )
                printf("%10d%10d    Bad Choice
    
    ", step , mod );
            if ( i == mod )
                printf("%10d%10d    Good Choice
    
    " , step , mod );
        }
        return 0;
    }

    升级版本:

    思路:只要有一个遍历出来的数和已经算出来的随机数相等 ,根据该公式,那么后来遍历出来的数,必然循环相等。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    using namespace std;
    int visit[100005];
    int main()
    {
        int sept,mod;
        while(scanf("%d%d",&sept,&mod) != EOF)
        {
            int flag = 0,n = 0;
            memset(visit,0,sizeof(visit));
            for(int i = 1; i <= mod; i++)
            {
                n = (n + sept) % mod;
                if(visit[n])
                {
                    flag = 1;
                    break;
                }
                else
                {
                    visit[n] = 1;
                }
            }
            if(flag)
            printf("%10d%10d    Bad Choice
    
    ",sept,mod);
            else
            printf("%10d%10d    Good Choice
    
    ",sept,mod);
        }
        return 0;
     
    }
     
    
    
  • 相关阅读:
    pythonchallenge(二)
    pythonchallenge(三)
    pythonchallenge(一)
    [译]Python编写虚拟解释器
    [译]用R语言做挖掘数据《七》
    [译]用R语言做挖掘数据《六》
    [译]用R语言做挖掘数据《五》
    编译安装php容易出现的问题以及解决办法
    关于nodejs模块安装后找不到包解决办法
    gulp的入门
  • 原文地址:https://www.cnblogs.com/CheeseIce/p/10526852.html
Copyright © 2011-2022 走看看