zoukankan      html  css  js  c++  java
  • Gym 100917L Liesbeth and the String 规律&&胡搞

    题目:

    Description

    standard input/output
    Statements

    Little Liesbeth likes to play with strings. Initially she got a string of length n, consisting of letters 'a' only.

    Then Liesbeth performs next operations with the string:

    • If the first letter of the string is 'a', then she adds to the end of the string "bc", and after that removes first two letters of the string.
    • If the first letter of the string is 'b', then she adds to the end of the string 'a', and after that removes first two letters of the string.
    • If the first letter of the string is 'c', then she adds to the end of the string 'aaa" and after that removes first two letters of the string.

    Liesbeth stops when she has the string of length 1. For example, if n = 4, she needs 6 operations :

    Liesbeth found that for some n number of operations is too big, and its hard to understand if the process is finite. So she asked You to write the program to help her.

    Input

    First line of the input contains one integer n (2 ≤ n ≤ 106) — length of the initial string.

    Output

    Print one integer — number of operations needed to obtain string of length 1. If process is infinite, print  - 1 insteaSample Input

    Input
    4
    Output
    6
    Input
    3
    Output
    24


    题目大意:给出一个字符串(只含a)的初始长度,做一下变换,求得到字符串长度为1时的步骤数,变换如下:
    1.字符串首字母为a时 字符串末尾加bc 并删除前2个字符
    2.字符串首字母为b时 字符串末尾加a 并删除前2个字符
    3.字符串首字母为c时 字符串末尾加aaa 并删除前2个字符

    题目思路:找规律,
    当字符串长度为偶数时:经过n/2步变为只含bc长度为n的形式,再经过n/2步变成只含a长度为n/2的形式
    当字符串长度为奇数时:经过(n+1)/2 步变为含c+k(bc)形式长度为n的串,在经过(n+1)/2步变成只含a长度为n/2*3+2的串

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<vector>
     5 #include<stdio.h>
     6 #include<stdlib.h>
     7 #include<queue>
     8 #include<math.h>
     9 #define INF 0x3f3f3f3f
    10 #define MAX 10000005
    11 #define Temp 1000000000
    12 
    13 using namespace std;
    14 
    15 int main()
    16 {
    17     long long n,sum;
    18     while(scanf("%lld",&n)!=EOF)
    19     {
    20         sum=0;
    21         while(n>1)
    22         {
    23             if(n%2==0)
    24             {
    25                 while(n>1 && n%2==0)
    26                 {
    27                     sum+=n;
    28                     n/=2;
    29                 }
    30             }
    31 
    32             else
    33             {
    34                 while(n%2 && n>1)
    35                 {
    36                     sum+=(n/2+1);
    37                     sum+=(n/2+1);
    38                     n=n/2*3+2;
    39                 }
    40             }
    41         }
    42         printf("%lld
    ",sum);
    43     }
    44     return 0;
    45 }
    View Code
    
    
  • 相关阅读:
    HTML基础-第一讲
    DIV中display和visibility属性差别
    1.html+css页面设计
    Log4j中为什么设计isDebugEnabled()方法
    CI中写原生SQL(封装查询)
    codeigniter 对数据库的常用操作
    CI中PHP写法规范(不断更新)
    CI中自定义SQL查询,LIKE模糊查询的处理
    CI中REST URL含有中文怎么处理(报错:The URI you submitted has disallowed characters)
    MyISAM InnoDB 区别
  • 原文地址:https://www.cnblogs.com/alan-W/p/5927973.html
Copyright © 2011-2022 走看看