hdoj1014 Uniform Generator

原创 2016年03月22日 19:43:11

题意:

给出公式next = (next + step) % mod中的step和mod,问能不能在恰好mod步之内生成0~mod-1中所有的数字。

另外,有人说可以不用模拟,直接判断step和mod这两个数是否互质就可以了(即最大公约数是否等于1),是则Good Choice,反之就是Bad Choice,暂时没有了解它的原理,也许是自己的数论基础不够好吧。

代码如下(15MS,1896K):

#include <iostream>
#include <fstream>
#include <iomanip>      // setw
#include <cstring>      // memset
using namespace std;

const int maxn(100001);
bool isGenerated[maxn];
int step, mod;

// 题意的输出格式 
void printFormat(bool flag) {
    cout << setw(10) << step << setw(10) << mod << "    ";
    cout << (flag ? "Good Choice" : "Bad Choice");
    cout << endl << endl;
}

/** 
*   模拟这个迭代的过程 
*   当在任意一个数字为起点(start)而在mod步恰好标记了整个数组,就返回成功true
*   反之,如果在每一个起点都不能满足,就返回失败 
*/
bool iterate() {
    for (int start = 0; start <= step - 1; ++start) {   // 只需要到step-1就可以了,因为跳了step,起点其实是一样的 
        memset(isGenerated, false, sizeof isGenerated);
        isGenerated[start] = true;
        int needTurn = mod - 1, next = start;   // needTurn为需要'翻转'(从false转为true)的次数 
        while (needTurn--) {
            next = (next + step) % mod;
            if (isGenerated[next]) {    // 如果其中有重复'翻转'的,即不能满足在mod步内翻转mod个元素,以这个起点的这一轮就失败 
                break;
            } else {
                isGenerated[next] = true;
            }
        }
        if (needTurn == -1) {   // 循环了恰好needTurn次 
            return true;
        }
    }
    return false;
}

int main() {
    //ifstream cin("in.txt");
    while (cin >> step >> mod) {
        bool resultFlag = iterate();
        printFormat(resultFlag);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

uniform对象及其使用

uniform代表opengl中用到的全局数据,是客户端向opengl传送数据的重要方式,该类数据不属于某个具体的shader。每一个uniform数据都属于一个uniform block,而unif...
  • zhouchengyunew
  • zhouchengyunew
  • 2016年10月08日 14:18
  • 1614

OpenGL编程逐步深入(五)Uniform 变量

在这个教程中我们会遇到一种新的Shader变量类型,即uniform变量。attribute(属性)变量和uniform变量的不同之处在于attribute 变量中包含顶点的具体数据,当每次执行sha...
  • Rongbo_J
  • Rongbo_J
  • 2015年04月18日 12:10
  • 2916

OpenGL学习脚印: uniform blocks在着色器中的使用

写在前面 目前,我们在着色器中要传递多个uniform变量时,总是使用多个uniform,然后在主程序中设置这些变量的值;同时如果要在多个shader之间共享变量,例如投影矩阵pr...
  • ziyuanxiazai123
  • ziyuanxiazai123
  • 2016年10月01日 19:18
  • 2415

ACM--公约数为1--HDOJ 1014--Uniform Generator--水

HDOJ题目地址:传送门 Uniform Generator Time Limit: 2000/1000 MS (Java/Others)    Memory Limi...
  • qq_26891045
  • qq_26891045
  • 2016年07月11日 21:26
  • 1340

hdoj1014Uniform Generator模拟题

Uniform GeneratorTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)...
  • tonghu2010
  • tonghu2010
  • 2011年05月28日 09:45
  • 343

HDOJ 1014 Uniform Generator(公约数问题)

Problem Description Computer simulations often require random numbers. One way to generate pseudo-r...
  • qq_26525215
  • qq_26525215
  • 2016年03月24日 20:37
  • 546

1014 Uniform Generator

/* 题意;给定step和MOD 计算seed数组 且seed由公式 seed[i]=(seed[i-1]+step)%MOD 决定 若 seed数组里的所有数值在【0,MOD-1】内 输出 goo...
  • xiaotang_sama
  • xiaotang_sama
  • 2017年03月25日 16:51
  • 176

hdu--1014 Uniform Generator

题目:hdu–1014Problem Description Computer simulations often require random numbers. One way to genera...
  • scorpio_j
  • scorpio_j
  • 2017年08月03日 23:28
  • 67

杭电OJ—— 1014 Uniform Generator

Uniform Generator Problem Description Computer simulations often require random numbers. One...
  • lishuhuakai
  • lishuhuakai
  • 2013年07月05日 17:48
  • 2788

HDU 1014 Uniform Generator 水题

Uniform Generator Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...
  • LZK1997
  • LZK1997
  • 2016年12月03日 09:25
  • 134
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdoj1014 Uniform Generator
举报原因:
原因补充:

(最多只允许输入30个字)