Hdoj 1014 Uniform Generator

题目:点击打开链接

分析:题目要求均匀产生随机数,有两种方法:1 对产生的数进行标记 2 要产生随机数STEP和MOD的最大公约数不能超过1

代码一:

#include<stdio.h>
#include<string.h>
int a1[100010];
int main()
{
	int STEP,MOD;
	while(~scanf("%d%d",&STEP,&MOD))
	{
		int i;
		int k=0;
		memset(a1,0,sizeof(a1));
		for(i=1;i<=MOD-1;i++)
		{
		   k=(k+STEP)%MOD;
		   if(a1[k])
		   break;
		   a1[k]++;
	    }
		if(i!=MOD)
		printf("%10d%10d    Bad Choice\n",STEP,MOD);
		else
		printf("%10d%10d    Good Choice\n",STEP,MOD);
		printf("\n");
	}
	return 0;
}

代码二:

#include<stdio.h>
int main()
{
	int s,m;
	while(~scanf("%d%d",&s,&m))
	{
		int i,k=0;
		for(i=1;i<=m;i++)
		{
			if(s%i==0&&m%i==0&i>1)
			k=1;
		}
		if(k)
		printf("%10d%10d    Bad Choice\n",s,m);
		else
		printf("%10d%10d    Good Choice\n",s,m);
		printf("\n");
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 15:55:41

Hdoj 1014 Uniform Generator的相关文章

HDU 1014 Uniform Generator 题解

找到规律之后本题就是水题了,不过找规律也不太容易的,证明这个规律成立更加不容易. 本题就是求step和mod如果GCD(最大公约数位1)那么就是Good Choice,否则为Bad Choice 为什么这个结论成立呢? 因为当GCD(step, mod) == 1的时候,那么第一次得到序列:x0, x0 + step, x0 + step-- 那么mod之后,必然下一次重复出现比x0大的数必然是x0+1,为什么呢? 因为(x0 + n*step) % mod: 且不需要考虑x0 % mod的值为

HDU 1014 Uniform Generator

Uniform Generator Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 22610    Accepted Submission(s): 8889 Problem Description Computer simulations often require random numbers. One way to generate

HDU 1014 Uniform Generator【GCD函数】

Uniform Generator Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 20180    Accepted Submission(s): 7902 Problem Description Computer simulations often require random numbers. One way to generat

HDU 1014.Uniform Generator【模拟及优化】【8月16】

Uniform Generator Problem Description Computer simulations often require random numbers. One way to generate pseudo-random numbers is via a function of the form seed(x+1) = [seed(x) + STEP] % MOD where '%' is the modulus operator. Such a function wil

HDU 1014 Uniform Generator(题解)

Uniform Generator Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 32990    Accepted Submission(s): 13081 Problem Description Computer simulations often require random numbers. One way to generat

hdu 1014.Uniform Generator 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1014 题目意思:给出 STEP 和 MOD,然后根据这个公式:seed(x+1) = [seed(x) + STEP] % MOD,问是否在一个周期里可以产生 0 - mod-1 的数.可以的话输出 "Good Choice", 否则输出 "Bad Choice". 好久以前留下来的问题了,以前觉得题目意思又长,以为是很难的题目......今天看<短码之美>

ACM HDU 1014 Uniform Generator

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1014 解题思路: 1. 把题目意思读懂后,明白会输入两个数,然后根据题中的公式产生一系列伪随机数,看这些数是不是能够包含0~MOD-1.如果产生不了就输出“Good Choice”,否则输出“Bad Choice”. 2. 全部假使x从0开始,设STEP为a,MOD为b.如果说a,b存在倍数关系,即假设最小存在2倍关系,那么就会有b=2a.x初始为0,第一步之后为a,第二步之后为0,之后a.0交替出

(HDU)1014 --Uniform Generator(统一随机数生成)

这个题目不难,关键是看懂英文:(判断两个数是否互质,而且注意输出的格式) 描述 计算机模拟通常需要随机数.生成伪随机数的一种方式是通过一定形式的函数: seed(x + 1)= [seed(x)+ STEP]%MOD 其中'%'是模运算符. 这样的函数将生成在0和MOD-1之间的伪随机数(种子).这种形式的作用的一个问题就是,它们将总是重复地生成相同的模式. 为了最小化这种影响,仔细选择STEP和MOD值,可以使得在0和MOD-1(包括这两者)之间的所有值的均匀分布. 例如,如果STEP = 3

hdu 1014 Uniform Generator(水 枚举 gcd)

题意:有一个数列 seed[x+1]=(seed(x)+step)%mod 给出 step 和 mod 如果求出的是以 1...mod-1 为循环节的数列 则为 good choice 否则 则是 bad choice 思路:1.用标记法 如果 形成循环节时 每个数都被标记到 则good choice 2.当两个数互素时 则 good choice 2.代码 #include<cstdio> #include<cstring> #include<iostream> #i