CF817C Really Big Numbers

思路:

二分。

实现:

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4
 5 typedef long long ll;
 6
 7 const ll MAXN = 1e18;
 8
 9 ll n, s;
10
11 bool check(ll x)
12 {
13     ll sum = 0;
14     ll tmp = x;
15     while (x)
16     {
17         sum += x % 10;
18         x /= 10;
19     }
20     return tmp - sum >= s;
21 }
22
23 int main()
24 {
25     cin >> n >> s;
26     ll l = 0, r = MAXN + 1, res = MAXN + 1;
27     while (l <= r)
28     {
29         ll m = (l + r) >> 1;
30         if (check(m)) r = m - 1, res = m;
31         else l = m + 1;
32     }
33     cout << (n >= res ? n - res + 1 : 0) << endl;
34     return 0;
35 }
时间: 2024-08-07 04:08:04

CF817C Really Big Numbers的相关文章

题解 CF817C 【Really Big Numbers】

题目链接:CF817C 前置算法 : 二分 我们先考虑如何得到答案,若最小满足\(x\)减去其各数位之和后大于\(s\) \(ans = n - x + 1\) 我们只要打个表就可以发现\(:\) 若\(x < y\)则\(|x| \leq |y|\) \((\)设\(|x|\)表示\(x\)减去其各数位之和\()\) 证明就不写了 说明答案是递增的, 那就用二分 我们二分出最小满足\(|x|\)大于\(s\) \(check\)函数就根据题意所写 如果找不到\(|x| \leq s\)就输出\

LeetCode OJ - Sum Root to Leaf Numbers

这道题也很简单,只要把二叉树按照宽度优先的策略遍历一遍,就可以解决问题,采用递归方法越是简单. 下面是AC代码: 1 /** 2 * Sum Root to Leaf Numbers 3 * 采用递归的方法,宽度遍历 4 */ 5 int result=0; 6 public int sumNumbers(TreeNode root){ 7 8 bFSearch(root,0); 9 return result; 10 } 11 private void bFSearch(TreeNode ro

129. Sum Root to Leaf Numbers

Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number. An example is the root-to-leaf path 1->2->3 which represents the number 123. Find the total sum of all root-to-leaf numbers. For example, 1 / 2 3 T

421. Maximum XOR of Two Numbers in an Array

Given a non-empty array of numbers, a0, a1, a2, - , an-1, where 0 ≤ ai < 231. Find the maximum result of ai XOR aj, where 0 ≤ i, j < n. Could you do this in O(n) runtime? Example: Input: [3, 10, 5, 25, 2, 8] Output: 28 Explanation: The maximum resul

Humble Numbers(丑数) 超详解!

给定一个素数集合 S = { p[1],p[2],...,p[k] },大于 1 且素因子都属于 S 的数我们成为丑数(Humble Numbers or Ugly Numbers),记第 n 大的丑数为 h[n]. 算法 1: 一种最容易想到的方法当然就是从 2 开始一个一个的判断一个数是否为丑数.这种方法的复杂度约为 O( k * h[n]),铁定超时(如果你这样做而没有超时,请跟 tenshi 联系) 算法 2: 看来只有一个一个地主动生成丑数了 : 我最早做这题的时候,用的是一种比较烂的

【Scala】Scala之Numbers

一.前言 前面已经学习了Scala中的String,接着学习Scala的Numbers. 二.Numbers 在Scala中,所有的数字类型,如Byte,Char,Double,Float,Int,Long,Short都是对象,这七种数字类型继承AnyVal特质,这七种数字类型与其在Java中有相同的范围,而Unit和Boolean则被认为是非数字值类型,Boolean有false和true两个值,你可以获取到各个数字类型的最值. 复杂的数字和日期 如果需要更强大的数类,可以使用spire,sc

2、Add Two Numbers

1.Add Two Numbers--这是leedcode的第二题: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input:

[LeetCode In C++] 2. Add Two Numbers

题目: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) + (5 -> 6 -&

[LeetCode] Compare Version Numbers

Question: Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0. You may assume that the version strings are non-empty and contain only digits and the . character.The