zoukankan      html  css  js  c++  java
  • Codeforces 899D Shovel Sale

    题目大意

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

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

    比赛时我的思路

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

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

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

    若 $k-1=0$,则为平凡情形。
    考虑 $kge 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()

  • 相关阅读:
    1209.3——选择排序算法
    1209.2——直接插入排序算法
    1209.1——快速排序算法
    1208.1——猜数字小游戏
    1207.1——C语言 函数
    1207--ATM自动取款机的实现
    Mac搭建本地svn服务器,并用Cornerstone连接服务器
    iOS textField 和textView的一些用法
    iOS button 文字图片上下/左右排布
    iOS 代理的具体使用
  • 原文地址:https://www.cnblogs.com/Patt/p/8053576.html
Copyright © 2011-2022 走看看