【NOIP1999 普及组T1】 Cantor 表
一道水模拟,可以直接算。但菜鸡不会……
题目大意
原题导航:https://www.luogu.com.cn/problem/P1014
一个表格:
, , , , …
, , , …
, , …
, …
…
按照Z字型排列,即:
问第项是什么。
做法
这样的表格比较难看,我们先把它转换一下:
这样将每一行都分离了出来,可以发现,每行的数的数量形成了等差数列。第一行有个数,第二行有个数……
那么,我们就要将第项所在行找出来:
1 | int add=1; |
当然,这个可以直接算出来,没有必要暴力枚举,但数据太水了,依旧可以过。
知道它是第几行的,我们就要看他是什么了。不难发现,当add
是奇数的时候,add
行分母依次为从递增到add
的数列,分子为从add
递减至的数列;而当add
是偶数的时候,add
行分子依次为从递增到add
的数列,分母为从add
递减至的数列。
可以得到以下的代码:
1 | //add为当前行数的数量,n是倒数第几个,最后别忘了+1 |
完整AC代码:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咕咕云梦泽!
评论
TwikooGitalk