Processing math: 0%

[ZJOI2009]函数 题解

题目链接:[ZJOI2009]函数

对于n=1的情况,直接输出1

对于n>1的情况,由于我们可以将图上下反转,所以第k层的情况可以被转成第n-k+1

规律自己打个表可以推出来:ans=min(k,n-k+1)*2

关键是如何证明它,我们用数学归纳法证明

k=1,时,很明显ans=2(即最下端的那两部分)

假设在k-1的时候结论成立,即此时ans=2*(k-1)

那么在k的时候

我们将ans中的每一段向上延伸,在碰到交点时停止,所得到的新2(k-1)段则是第k层的组成部分(因为每一个交点只会涉及到两个函数值的大小关系变化,这由题目中“没有三个函数共点”可以推知)

而每一层的开头与结尾必须是像正负无穷大无限延伸的

所以我们还要补上一头一尾两段

总的答案=2(k-1)+2=2k段,命题得证

复制代码
 1 #include<iostream>
 2 #include<string>
 3 #include<string.h>
 4 #include<stdio.h>
 5 #include<algorithm>
 6 #include<vector>
 7 #include<queue>
 8 #include<map>
 9 using namespace std;
10 int n,k;
11 int main()
12 {
13     cin >> n >> k;
14     if (n==1) cout << 1;
15     else cout << min(k,n-k+1)*2;
16     return 0;
17 }
复制代码

 

posted @   EncodeTalker  阅读(249)  评论(3编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示