[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 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步