码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 899D Shovel Sale

时间:2017-12-17 23:50:53      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:总结   否则   注意   情况   body   正整数   div   实现技巧   包含   

题目大意

给定正整数 $n$($2\le n\le 10^9$)。
考虑无序整数对 $(x, y)$($1\le x,y\le n, x\ne y$)。
求满足 「$x+y$ 结尾连续的 9 最多」的数对 $(x,y)$ 的个数。

例子:
$n=50$,$(49,50)$ 是一个满足条件的数对。

比赛时我的思路

首先注意到,「两个正整数的和」的结尾的连续的 9 一定不包含进位的贡献,也不产生进位。

首先考虑(数对的和的)结尾最多有几个连续的 9 。不难得出:
设 $n$ 的位数为 $k$ ,令 $x=5\times 10^{k-1}$ 。
若 $n\ge x$,则和的结尾最多有 $k$ 个连续的 9 。
若 $n=10^{k} - 1$,满足条件的数对有 $n - x$ 个,否则有 $n-x+1$ 个。

若 $n < x$ ,数对之和的第 $k$ 位一定小于 $9$,故结尾至多有 $k-1$ 个连续的 9 。

若 $k-1=0$,则为平凡情形。
考虑 $k\ge 2$ 的情形。
设 $n$ 的 第 $k$ 位上的数字为 $h(n)$,显然有 $h(n) > 0 $ 。

考虑数对 $(x,y)$($x>y$),设 $x$ 的第 $k$ 位上的数字为 $h(x)$ 。
将所有满足条件的数对 $(x,y)$ 分成下列若干类:

  1. $h(n)>h(x)=h(y)=0$
  2. $h(n)>h(x) = h(y) > 0$
  3. $h(n)>h(x) > h(y)>0$
  4. $h(n)>h(x) > h(y)=0$
  5. $h(n)=h(x) > h(y) > 0$
  6. $h(n) = h(x) > h(y) = 0$
  7. $h(n) = h(x)= h(y) $

在比赛中,我没考虑到上述第 7 种情况。

总结

本题的思维方式:分类。

实现技巧:
求一个正整数 $n$ 的位数可用 to_string(n).size()

Codeforces 899D Shovel Sale

标签:总结   否则   注意   情况   body   正整数   div   实现技巧   包含   

原文地址:http://www.cnblogs.com/Patt/p/8053576.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!