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
    
    
  • 相关阅读:
    Fibonacci数列--矩阵乘法优化
    没有上司的舞会--树形DP
    扩展欧几里德--解的个数
    洛谷 P1284 三角形牧场 题解(背包+海伦公式)
    2017-2018 ACM-ICPC Latin American Regional Programming Contest J
    求1-1e11内的素数个数(HDU 5901 Count primes )
    Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal 题解(思维+逆序对)
    HHKB Programming Contest 2020 D
    牛客练习赛71 数学考试 题解(dp)
    2019-2020 ICPC Asia Hong Kong Regional Contest J. Junior Mathematician 题解(数位dp)
  • 原文地址:https://www.cnblogs.com/alan-W/p/5927973.html
Copyright © 2011-2022 走看看