• HDU5670Machine(抽象进制)


    有一个机器,它有 m (2leq mleq 30)m(2m30) 个彩灯和一个按钮。每按下按钮时,最右边的彩灯会发生一次变换。变换为:
    
    1. 如果当前状态为红色,它将变成绿色;
    
    2.如果当前状态为绿色,它将变成蓝色;
    
    3.如果当前状态为蓝色,它将变成红色,并且它左边的彩灯(如果存在)也会发生一次变换。
    
    初始状态下所有的灯都是红色的。
    询问按下按钮 n (1leq n< {2}^{63})n(1n<263​​) 次以后各个彩灯的颜色。
    输入描述
    输入包含多组数据. 第一行有一个整数T (1leq Tleq 15)T(1T15), 表示测试数据的组数. 对于每组数据:
    唯一的一行包含2个整数 m (2leq mleq 30)m(2m30) 和 n (1leq n< {2}^{63})n(1n<263​​) 。
    输出描述
    对于每组数据,输出一个长度为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("
    ");
    32     }
    33     return 0;
    34 }
    View Code

     

  • 相关阅读:
    移动页面HTML5自适应手机屏幕宽度
    “流式”前端构建工具——gulp.js 简介
    HDU2602-Bone Collector
    HDU3535-AreYouBusy
    HDU1712-ACboy needs your help
    HDU3496-Watch The Movie
    HDU1171-Big Event in HDU
    POJ2533-Longest Ordered Subsequence
    HDU2084-数塔
    HDU2023-求平均成绩
  • 原文地址:https://www.cnblogs.com/zhaopAC/p/5428058.html
Copyright © 2020-2023  润新知