1432: [ZJOI2009]Function

1432: [ZJOI2009]Function

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 710  Solved: 528
[Submit][Status][Discuss]

Description

Input

一行两个整数n; k。

Output

一行一个整数,表示n 个函数第k 层最少能由多少段组成。

Sample Input

1 1

Sample Output

1

HINT

对于100% 的数据满足1 ≤ k ≤ n ≤ 100。

Source

题解:一道神奇的规律题(HansBug:感觉JSOI2015 Round2 Day1 T1都没这个题目神orz)

题解直接饮用吧,源链接在此,鸣谢BLADEVIL神犇么么哒

我们可以发现所有的情况(除n=1时),都可以找到两个交叉的直线,就是第一层的那

两个线段所在的直线如图中左

那么我们以这个为准,两边对称着加直线,会得到右图,每一层是折线,且每

加一对儿就多两条线段,一共要加k对儿,所以答案是2*k,由于图是对称的,就是

这张图从上往下看和从下网上看是对称的,所以上面第k个是下面第n-k+1个,所以

比较下这两个大小,k取min然后输出2*k就行了

 1 /**************************************************************
 2     Problem: 1432
 3     User: HansBug
 4     Language: Pascal
 5     Result: Accepted
 6     Time:0 ms
 7     Memory:220 kb
 8 ****************************************************************/
 9  
10 var
11    m,n:longint;
12 begin
13      readln(n,m);
14      case n of
15           1:writeln(1);
16           else if (n+1)<(m*2) then writeln((n-m+1)*2) else writeln(2*m);
17      end;
18 end.
原文地址:https://www.cnblogs.com/HansBug/p/4474913.html