【uoj#282】长度测量鸡 结论题
给出一个长度为 n(n+1)2 的直尺,要在 0 和 n(n+1)2 之间选择 n−1 个刻度,使得 1∼n(n+1)2 中任意一个长度都可以由某两个刻度(包括 0 和 n(n+1)2 )之间的距离表示出来。问是否有解。
n≤2500
题解
结论题
结论:当且仅当 n≤3 时有解。
神TM结论。。。
证明:
由于只有 C2n+1=n(n+1)2 种选择,因此一个长度只能用一种方式表示。
当 n>3 时,设 m=n(n+2)2 ,有 m≤10 。
由于要表示 m−1 ,因此 1 或 m−1 必有刻度,由于对称性不妨设 1 处有刻度。这样 1 也被表示出来。
由于要表示 m−2 ,因此 2 、m−2 或 m−1 必有刻度,而 2 和 m−1 会使得 1 被表示两次,只能选择 m−2 处。这样 2 、m−3 也被表示出来。
由于要表示 m−4 ,因此 2 、4 、m−4 或 m−3 必有刻度,而 2 和 m−3 会使得 1 被表示两次,m−4 会使得 2 被表示两次,只能选择 4 处。这样 3 、4 、m−6 也被表示出来;
由于要表示 m−5 ,因此 3 、5 、m−5 、m−4 或 m−1必有刻度,容易发现这些位置都不能选择,无法表示 m−5 。又因为 m≤10 ,因此前面表示的 1,2,3,4 均不等于 m−5 。所以不能表示 m−5 ,无解,命题得证。
因此直接判断 n 与 3 的大小关系即可。
1 2 3 4 5 6 7 8 | #include <cstdio> int main() { int T , n; scanf ( "%d" , &T); while (T -- ) scanf ( "%d" , &n) , puts (n > 3 ? "-1" : "1" ); return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步