1432: [ZJOI2009]Function
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 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.