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;
    }
  • 相关阅读:
    Linux-shell-算术运算{expr、bc、dc、(( ))和[ ]}
    [SHELL]:let 命令详解
    23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态
    ethtool -p eth0 物理口一个灯在不停的闪烁
    PXE
    UID, EUID, SUID, FSUID
    echo $[1 + 2] shell中 $[] 在bash中同$(()),用于算术计算
    Cocos2d入门--3-- 向量的应用
    Cocos2d入门--2-- 三角函数的应用
    Cocos2d入门--1-- 初涉相关属性或代码
  • 原文地址:https://www.cnblogs.com/xuejianye/p/5424846.html
Copyright © 2011-2022 走看看