【 OJ 】 HDOJ1014 迷宫搜索类问题 [ 13 ]

36 篇文章 0 订阅
3 篇文章 0 订阅

ummmm....终于又AC了一题.....ummmmm

数论不好,暂时还没搞清楚网上的方法互质,我的就是ummm暴力出奇迹,暴搜挂着机,题目意思MOD-1出MOD-1个不重复不为0数字那么就弄个bool数组来....保存是否已经被记录,被记录直接出来失败,如果没有继续按照公式搜索......

# include<iostream>
#include <iomanip>
using namespace std;
bool IS_OK[1000000] = {false };//标记到100W个MOD
int main(void) {
	//Each line of input will contain a pair of integers for STEP and MOD in that order (1 <= STEP, MOD <= 100000).
	int STEP, MOD;
	int seed = 0;
	IS_OK[0] = true;
	int index = 0;
	while (cin >> STEP >> MOD) {
		seed = 0;
		for (index = 0; index < MOD - 1; ++index) {
			seed = (seed + STEP) % MOD;
			if (!IS_OK[seed])	//在MOD-1 步之内要出MOD-1个不一样的数,既然有了相同的肯定完蛋了
				IS_OK[seed] = true;
			else 
				break;
		}//数据迭代检查
		if (index == MOD - 1) {//判断迭代是否是break出来的
			for (index = 0; index < MOD - 1; index++) {
				if (!IS_OK[index]) 
					break;
			}//检查是否有false
		}
		//判断检查是否是break出来的
		cout << setw(10) << STEP << setw(10) << MOD << "    ";
		cout << ((index == MOD - 1 )? "Good Choice" : "Bad Choice");
		cout << endl << endl;
		//初始化判断IS_OK
		for (index = 1; index < MOD; ++index) {
			IS_OK[index] = false;
		}
	}
	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值