码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-10-02 21:42:53      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

题目:

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 规律&&胡搞

标签:

原文地址:http://www.cnblogs.com/alan-W/p/5927973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!