HDU5670Machine(抽象进制)

有一个机器,它有 m (2\leq m\leq 30)m(2≤m≤30) 个彩灯和一个按钮。每按下按钮时,最右边的彩灯会发生一次变换。变换为:

1. 如果当前状态为红色,它将变成绿色;

2.如果当前状态为绿色,它将变成蓝色;

3.如果当前状态为蓝色,它将变成红色,并且它左边的彩灯(如果存在)也会发生一次变换。

初始状态下所有的灯都是红色的。
询问按下按钮 n (1\leq n< {2}^{63})n(1≤n<2?63??) 次以后各个彩灯的颜色。

输入描述

输入包含多组数据. 第一行有一个整数T (1\leq T\leq 15)T(1≤T≤15), 表示测试数据的组数. 对于每组数据:
唯一的一行包含2个整数 m (2\leq m\leq 30)m(2≤m≤30) 和 n (1\leq n< {2}^{63})n(1≤n<2?63??) 。

输出描述

对于每组数据,输出一个长度为mm的字符串,表示从左到右mm个彩灯的颜色。
R代表红色;G代表绿色;B代表蓝色。

输入样例

2
3 1
2 3

输出样例

RRG
GR

红、绿、蓝分别表示0、1、2,每次操作就相当于+1,原问题就转化为求n的三进制

表示的最低的m位,即求 n mod 3^m3???的三进制表示。

复杂度 O(m)O(m)

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 typedef long long LL;
 6 int main()
 7 {
 8     int m ,t;
 9     LL n;
10     scanf("%d", &t);
11     int color[50];
12     while (t--)
13     {
14         memset(color, 0, sizeof(color));
15         scanf("%d%I64d", &m, &n);
16         int cnt = m;
17         while (n > 0 && m > 0)
18         {
19             color[m--] = n % 3;
20             n = n / 3;
21         }
22         for (int i = 1; i <= cnt; i++)
23         {
24             if (color[i] == 0)
25                 printf("R");
26             else if(color[i] == 1)
27                 printf("G");
28             else if (color[i] == 2)
29                 printf("B");
30         }
31         printf("\n");
32     }
33     return 0;
34 }

时间: 2024-08-09 23:53:05

HDU5670Machine(抽象进制)的相关文章

bytes数据类型,三元运算,进制互换

三元运算 如果这个条件成立就存这个值,如果那个条件成立就存那个值. 进制 bytes类型,字节数据类型也就是二进制类型,这个是python3专有数据类型,在python2里跟字符串是一个类型,也就是python2是不区分这个数据类型的. 比如说音频,视频文件都是二进制类型,也就是bytes类型.(python3通过socket在网络上传输数据时必须要用二进制格式,python2没有强制必须是二进制,字符串也可以) Python3中最大的新特性就是对文本和二进制数据做了更清晰的区分.文本通常是Un

Noip2006 2^k进制数题解

题目描述 Description 设r是个2k进制数,并满足以下条件: (1)r至少是个2位的2k进制数. (2)作为2k进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后,则q的总位数不超过w. 在这里,正整数k(1≤k≤9)和w(k<W≤30000)是事先给定的. 问:满足上述条件的不同的r共有多少个? 我们再从另一角度作些解释:设S是长度为w的01字符串(即字符串S由w个"0"或"1"组成),S对应于上述条件(3)

2-36进制的 两个数相加

最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要.有的时候代码的可维护.可重用.可扩展确实胜过单纯的算法效率高.所以拾起大牛书籍<大话设计模式>同时参考网上诸大牛的博客,开始我的设计模式之旅.由于平时编程时用C/C++,现在是Java,也练练Java语法. 今天先介绍一下命令模式. 概念: 命令模式(Command):将一个请求封装成一个对象,从而使你可用不同的请求对象对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作.

JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都是很痛苦的事情,但是程序之路这么长,你必须精通的不能再精通一门语言才行(有点说大了哈),但是最起码你要如鱼得水吧,我准备的资料有: JAVA编程思想 深入浅出JAVA 黑马,传智,慕课,极客学院等-的视频 Google搜索 我们既然是重新学一遍,那我们尽量就是用记事本去敲代码好了,这里我用notep

内存0.1---内存里数据的表示形式以及进制转换

操作系统的位数与内存的关系: 32位操作系统是指系统的寻址空间是2的32次方,即4G,也就是说32位操作系统只支持最大4G的内存,64位操作系统寻址空间理论上为2的64次方,即17179869184G,目前最大支持128G,主流主板最大容量为16G. 内存的概念: 内存存储的是二进制数,可以将内存抽象为开关.一个开关对应两应两种状态,一种状态对应1,一种状态对应0.把八个开关放到一间房子里面,这间房子就相当于一个字节.房间的门牌号相当于地址.无数个房间堆叠且,形成了摩天大厦,大厦就相当于内存.

计算机中的进制

在学习编程的过程中,经常见到二进制,十进制,十六进制,到底进制表示什么意思呢?进制,字面意思,前进的制度,在数字方面,就是数字前进的制度,数字怎么向前进,那就是进位,我们在做加法运算的时候都会用到进位,8+3,我们会写个1,然后向前进一位,数数的时候更是如些,1,2,3......10, 我们不会再向下数11,12 ..... ,而是在心中放一个1, 然后再1,2,3,4,......10, 到10之后, 我们也不会向下数,而是在心中再记一个1,那么心中的数字就是2了,继续向下数,1,2,3,数

数组中hashCode就是内存地址,以及汉字幻化为16进制或10进制

int[] arr4={1,2,3,4,5}; System.out.println("arr4: "+arr4); System.out.println("arr4.hashCode: "+arr4.hashCode()); //将hashCode值转化为16进制的两种方式 System.out.println(Integer.toString(366712642,16));//将整数转化为16进制的数为:15db9742 System.out.println(I

进制、类型转换、提升

进制 java支持四种进制表示 进制 示例 前缀 备注 十进制 int x = 10;     二进制 int x = 0b10; 0b或0B 计算机储存 八进制 int x = 010; 0 兼容以前程序 十六进制 int x = 0xceaf 0x或0X 0~9,a~f 细节: 一个十六进制位可以表示四个二进制位 当数值位数较多时,可以使用下划线对数字进行隔开,例:1_230_456 字面常量 整数:字面常量为int型,如果要表示long类型的字面常量,使用L或l做后缀,建议使用L,因为字母

1813. M进制数问题

1813. M进制数问题 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description 试用 C++的类来表示一般进制数. 给定 2 个n位m进制整数A和B,计算m进制数整数P = A / B (向下取整)与 Q = A % B的值. Input 输入包含多个测试点.第一行为一个整数T,表示测试点数. 对于每个测试点第 1 行是进制 m .第 2 行和第 3 行分别给出 m 进制整数 A 和 B. 所有 m 进制数的10进制表示均