zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    vue+elemnet 实现自定义参数
    css 实现鼠标移上去标题向右滑动的效果
    vue 搜索关键字列表结果高亮显示
    leaflet 实现 测距、测面、清除测量的功能
    js对象的合并
    formdata的使用方法
    fromdata上传多个文件
    3.11formdata的使用
    微信小程序的自定义插件
    3.6
  • 原文地址:https://www.cnblogs.com/zhaopAC/p/5428058.html
Copyright © 2011-2022 走看看