zoukankan      html  css  js  c++  java
  • BestCoder Round #81 (div.2)1001

    Machine

    Accepts: 580
    Submissions: 1890
    Time Limit: 2000/1000 MS (Java/Others)
    Memory Limit: 65536/65536 K (Java/Others)
    Problem Description

    There is a machine with m(2≤m≤30)m (2leq mleq 30)m(2m30) coloured bulbs and a button.When the button is pushed, the rightmost bulb changes. For any changed bulb,

    if it is red now it will be green;

    if it is green now it will be blue;

    if it is blue now it will be red and the bulb that on the left(if it exists) will change too.

    Initally all the bulbs are red. What colour are the bulbs after the button be pushed n(1≤n<263)n (1leq n< {2}^{63})n(1n<263​​) times?

    Input

    There are multiple test cases. The first line of input contains an integer T(1≤T≤15)T (1leq Tleq 15)T(1T15) indicating the number of test cases. For each test case:

    The only line contains two integers m(2≤m≤30)m (2leq mleq 30)m(2m30) and n(1≤n<263)n (1leq n< {2}^{63})n(1n<263​​).

    Output

    For each test case, output the colour of m bulbs from left to right. R indicates red. G indicates green. B indicates blue.

    Sample Input
    2
    3 1
    2 3
    Sample Output
    RRG
    GR
    题目大意:
    就是有一排灯泡,初始时每一个灯泡的颜色都是红色,同时有一个Button,每点一次,就会时最右边的灯泡的颜色都会发生变化,
    变化规则为R->G->B->R,周而复始进行循环,但是当灯泡是从B->R时,它左边的灯泡的颜色也会相应的发生变化。
    思路分析:好久没敲代码了,手生的不行,被这么一道水题坑了半天,首先是输入的时候,n的范围很大,应该用lld或者I64d进行
    输入,另外n值这么大,我竟然第一想法是模拟一遍,orz,超时了,每一个灯泡的最终颜色只与n%3的余数有关,这样进行判断无疑是
    最省时间的。
    代码:
    #include <iostream>
    #include <stack>
    #include <cstdio>
    #include <cstring>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    const int maxn=35;
    char bulb[maxn];
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            __int64  m,n;
            scanf("%I64d%I64d",&m,&n);
            memset(bulb,'R',sizeof(bulb));
           for(int i=0;i<m;i++)
           {
               if(n==0) break;
                   if(n%3==0) bulb[i]='R';
                   if(n%3==1) bulb[i]='G';
                   if(n%3==2) bulb[i]='B';
                   n/=3;
           }
         for(int i=m-1;i>=0;i--)
           printf("%c",bulb[i]);
           printf(" ");
        }
        return 0;
    }
  • 相关阅读:
    【华为云技术分享】云小课 | 磁盘容量不够用?小课教你来扩容!
    什么时候用用value,什么时候用innerHTML?
    零碎知识点总结
    hnctf安恒--蜘蛛侠呀
    sqli-labs Less-11 and Less-12
    sql注入--基于报错的注入
    ‘百度杯’十月场web ---login
    “百度杯”CTF比赛 九月场---123
    百度杯 ctf 九月场---Text
    【迎圣诞,拿大奖】+流量分析+Writeup分享
  • 原文地址:https://www.cnblogs.com/xuejianye/p/5424846.html
Copyright © 2011-2022 走看看