Gym 100917L Liesbeth and the String 规律&&胡搞

Posted 声声醉如兰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\\n",sum);
43     }
44     return 0;
45 }
View Code

 

 


以上是关于Gym 100917L Liesbeth and the String 规律&&胡搞的主要内容,如果未能解决你的问题,请参考以下文章

Gym 100507H - Pair: normal and paranormal

Dales and Hills Gym - 101411D

Gym - 100923APor Costel and Azerah(思维水题)

Gym 240668E - Anton and Ira - [贪心]

Por Costel and the Match Gym - 100923H(经典种类并查集)

Gym 100712I Bahosain and Digits(开关翻转问题)