hdu--5670--Machine (模拟三进制)
来源:互联网 发布:淘宝网折800女士皮草 编辑:程序博客网 时间:2024/05/20 08:23
Machine
Accepts: 580
Submissions: 1890
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
有一个机器,它有 m(2≤m≤30) 个彩灯和一个按钮。每按下按钮时,最右边的彩灯会发生一次变换。变换为:1. 如果当前状态为红色,它将变成绿色;2.如果当前状态为绿色,它将变成蓝色;3.如果当前状态为蓝色,它将变成红色,并且它左边的彩灯(如果存在)也会发生一次变换。初始状态下所有的灯都是红色的。询问按下按钮 n(1≤n<263) 次以后各个彩灯的颜色。
输入描述
输入包含多组数据. 第一行有一个整数T(1≤T≤15), 表示测试数据的组数. 对于每组数据:唯一的一行包含2个整数 m(2≤m≤30) 和 n(1≤n<263) 。
输出描述
对于每组数据,输出一个长度为m的字符串,表示从左到右m个彩灯的颜色。R代表红色;G代表绿色;B代表蓝色。
输入样例
23 12 3
输出样例
RRGGR
红、绿、蓝分别表示0、1、2,每次操作就相当于+1,原问题就转化为求n的三进制
表示的最低的m位,即求 n mod 3^m
的三进制表示。
复杂度 O(m)
代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define ll unsigned long long char ans[40];char s[4]={'R','G','B'};void init(){ for(int i=0;i<33;i++) ans[i]='R';}int main(){#ifdef yibin freopen("in.txt","r",stdin);#endif ll t, n, m, i, j, k; scanf("%I64d",&t); while(t--){ scanf("%I64d%I64d",&m, &n); init(); k=m; while(n){ k--; ans[k]=s[(0+n)%3]; n/=3; } for(i=0;i<m;i++) printf("%c",ans[i]); puts(""); } return 0;}
0 0
- hdu--5670--Machine (模拟三进制)
- hdu 5670 Machine(模拟)
- hdu 5417 Victor and Machine(模拟)
- hdu 5417 Victor and Machine 模拟
- hdu 5670 Machine(水题)
- HDU 5670 Machine
- HDU 5670 Machine
- HDU 5670 Machine
- HDU 5417 Victor and Machine(模拟||递推)
- hdoj Machine 5670 (模拟)水
- [hdu 5670][BestCoder Round #81 t1] Machine
- HDU 5670 Machine(水题锻炼思维)
- hdu 5670 Machine(BC规律题)
- Prolog 模拟 Turing Machine
- hdu 4045 Machine scheduling
- hdu 1150 Machine Schedule
- hdu 1150 Machine Schedule
- hdu 1150 Machine Schedule
- Android动画机制与使用技巧
- 关于某些进程使adb不能正常工作
- 2016春季练习——二分+贪心
- leetcode 8. String to Integer (atoi)
- poj 3186 Treats for the Cows(区间dp)
- hdu--5670--Machine (模拟三进制)
- POJ 3903 Stock Exchange【LIS 二分查找】
- 边工作边学习的现实选择
- 进程(应用程序)之一
- web项目下让tomcat效率提升!
- win7 下搭建前端开发环境 sublime-text3
- GridView添加HeaderView
- 【noip2013普及】 小朋友的数字
- font-family中文字体的英文名称