BZOJ 1432 [ZJOI2009]Function

1432: [ZJOI2009]Function

Description

Input

一行两个整数n; k。

Output

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

Sample Input

1 1

Sample Output

1

HINT

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


  很明显这是一道结论题。又是愣没想出来,以下来自:http://blog.csdn.net/zmoiynlp/article/details/44226459

  n=1的时候输出1,其余时候输出2*k,

  假如k>(n>>1)的话,令k=n-k+1(因为1和n-1是对称的)。
  为什么呢……
  我们画一个图。(这个图是很经典的)

  这是5条直线(函数)。可以看到,这些点以
  A
  BC
  DEF
  GHIJ
  的方式排列。
  第一个部分只经过A(这样一定是最优的)
  第二个部分只经过BAC
  第三个部分只经过DBECF……
  1
  1+2
  2+3
  3+4……
  线段数比点数多一,所以就是
  2
  4
  6
  8……
  特别地,当n=1时是1。

  当然,对于结论题,代码往往都很短……

  当时图已经画出来了,但因为题目中的“连续函数”(天知道是不是线性的),卡了很久。但现在一想,只有线性最优啊……

  我又先看了题解,罪过啊……

 1 /************************************************************** 
 2     Problem: 1432 
 3     User: Doggu 
 4     Language: C++ 
 5     Result: Accepted 
 6     Time:0 ms 
 7     Memory:820 kb 
 8 ****************************************************************/
 9   
10 #include <cstdio> 
11 #include <algorithm> 
12 int n, k, a; 
13 int main() { 
14     scanf("%d%d",&n,&k); 
15     if(n==1) a=1; 
16     else if(k<=(n>>1)) a=2*k; 
17     else a=2*(n-k+1); 
18     printf("%d\n",a); 
19     return 0; 
20 }
结论题

 

  

posted @ 2017-06-09 10:58  Doggu  阅读(199)  评论(0编辑  收藏  举报