首页 > 其他分享 >基于 1 的算术

基于 1 的算术

时间:2024-11-09 21:30:45浏览次数:1  
标签:10 基于 算术 LL len int -- include

问题 - 440C - Codeforces
原题链接

题目描述

\(Vasechkin\) 教授想要将正整数 \(n\) 表示为一些加数的和,其中每个加数可正可负,但都是只包含数字 \(1\) 的整数。例如,他可以将 \(121\) 表示为 \(121=111+11+(-1)\) 。

请你帮助他找到这样的和中所需数字 \(1\) 的最小数量。

输入描述

第一行输入一个整数 \(n\)。其中 \(1\le n < 1e15\)。

输出描述

输出所需的 \(1\) 的最小数量。

样例

输入样例

121

输出样例

6

本人解法

设 \(y_i\) 为 \(i\) 个 1,如 \(y_5 = 11111\)。
想一想,对于 \(10^n\) 只需要使用一个 \(y_{n + 1} - y_{n}\) 即可,为了方便,先把正常需要的 \(y_i\) 的数量统计出来。如 \(150\) 就等于 \(1\) 个 \(10^2\),\(5\) 个 \(10^5\),也就是 \(1\) 个 \(y_3\),\(4\) 个 \(y_2\),\(-5\) 个 \(y_1\)。

设每个 \(y_i\) 的数量为 \(a_i\)。使 \(a_i\) 减少的方式,只有借助更高的 \(y_{i+1}\),已知,一个 \(y_{i+1} = 10y_i - y_1\)。因为这题最多有 \(10^{16}\),也就最多 \(17\) 种 \(y_i\),因此,对每个 \(y_i\) 操作,暴力每个借助不借助高位,改变 \(a_i\) 的数量,最后统计答案即可。

注意:正负数 \(a_i\) 借助, \(a_i\) 变化是不同的,而每个 \(y_i\) 最多需要借助一次(可自行证明)。

比较容易理解。

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cmath>

using namespace std;

typedef long long LL;

const int N = 110;

LL n;
vector<int> g;
int a[N], len, minv = 0x3f3f3f3f;

void dfs(int x)
{
    if (x > len)
    {
        
        int sum = 0;
        for (int i = 0; i <= len; i ++ )
            sum += abs(a[i]) * (i + 1);
        minv = min(minv, sum);
        return ;
    }
    
    int y = abs(a[x]), i = x + 1;
    dfs(x + 1);
    
    if (a[x] > 0) // 
    {
        a[x + 1] += 1;
        a[x] -= 10;
        a[0] -- ;
        dfs(x + 1);
        a[x] += 10;
        a[0] ++ ;
        a[x + 1] -- ;
    } 
    else if (a[x] < 0) 
    {
        a[x + 1] --;
        a[x] += 10;
        a[0] ++ ;
        dfs(x + 1);
        a[x] -= 10;
        a[0] -- ;
        a[x + 1] ++;
    }
}

int main()
{
    cin >> n;
    while (n) // 取出每一位
    {
        g.push_back(n % 10);
        n /= 10;
    }
    
    len = g.size();
    for (int i = len - 1; i >= 0; i -- )
    {
        a[i] += g[i];
        if (i) a[i - 1] -= g[i];
        // cout << a[i] << endl;
    }
    dfs(0);
    
    cout << minv << endl;
    
    return 0;
}

这是题解解法

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>

using namespace std;

typedef long long LL;

LL d[100] = {0, 1, 11, 111, 1111, 11111, 111111, 1111111, 11111111, 111111111, 1111111111, 11111111111, 111111111111, 1111111111111, 11111111111111, 111111111111111, 1111111111111111, 11111111111111111};
LL n, m;
LL ans = 1e18;

int find(LL x)
{
    int l = 1, r = 16;
    while (l < r)
    {
        int mid = l + r >> 1;
        if (x <= d[mid]) r = mid;
        else l = mid + 1;
    }
    return l;
}

void dfs(int u, LL x, LL sum)
{
    if (!u)
    {
        if (!x) ans = min(ans, sum);
        return;
    }
    LL k = d[find(x)] - x, b = find(x); 
    dfs(u - 1, k % d[u], sum + k / d[u] * u + b);
    dfs(u - 1, x % d[u], sum + x / d[u] * u);
}

int main()
{
    cin >> n;
    dfs(16, n, 0);
    cout << ans;
    return 0;
}

/*
hack
19
7

150
15

111
3
*/

标签:10,基于,算术,LL,len,int,--,include
From: https://www.cnblogs.com/blind5883/p/18537329

相关文章

  • 基于 XQuery 的简单文字识别程序
    本篇文章介绍了如何使用XQuery进行简单的文字识别处理。尽管XQuery本身不具备图像处理能力,但它可以有效地处理XML格式的数据。假设输入的数据是一个XML格式的图像像素信息,我们可以利用XQuery提取出其中的文本数据。示例XML数据我们假设输入的图像已经被预处理为XML......
  • 基于大语言模型的规划
    文章目录整体框架方案生成反馈获取    虽然上下文学习和思维链提示方法形式上较为简洁且较为通用,但是在面对诸如几何数学求解、游戏、代码编程以及日常生活任务等复杂任务时仍然表现不佳。为了解决这类复杂任务,可以使用基于大语言模型的规划(Planning)。该......
  • 【Java项目】基于SpringBoot的【生鲜交易系统】
    技术简介:系统软件架构选择B/S模式、java技术和MySQL数据库等,总体功能模块运用自顶向下的分层思想。系统简介:考虑到实际生活中在生鲜交易方面的需要以及对该系统认真的分析,将系统权限按管理员,用户这两类涉及用户划分。(a)管理员;管理员使用本系统涉到的功能主要有:首页,个人......
  • 基于联邦学习和同态加密的医疗安全系统研究设计
    背景及意义基于联邦学习和同态加密的医疗应用系统的研究设计具有重要的意义。首先,医疗领域的数据是极其敏感和隐私的,包含了大量的个人健康信息。因此,如何在保护数据隐私的同时实现数据共享和分析成为了医疗数据处理的关键问题。联邦学习结合同态加密技术的应用,为医疗数据......
  • 基于YOLOv8深度学习的木薯病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练
    背景及意义木薯是一种重要的农作物,广泛用于食品、饲料以及工业生产等多个领域。然而,木薯病害的发生会严重影响其产量和品质,对农民的收入和食品安全造成明显的负面影响。本文基于YOLOv8深度学习框架,通过2606张图片,训练了一个木薯叶片病害的识别模型,可用于识别5种不同的木......
  • 在 Windows 系统中,默认并没有直接支持基于 URL 的黑名单和白名单功能。不过,您仍然可以
    在Windows系统中,默认并没有直接支持基于URL的黑名单和白名单功能。不过,您仍然可以通过一些间接的方式实现URL层面的访问控制。以下是几种可能的实现方法:1. 修改Hosts文件Windows系统提供了hosts文件,它允许您将域名映射到特定的IP地址。您可以通过修改该文件来阻止......
  • 基于Java+SpringBoot心理测评心理测试系统功能实现十
    免费下载:[猿来入此]一、前言介绍:1.1项目摘要心理测评和心理测试系统在当代社会中扮演着越来越重要的角色。随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态、诊断心理问题、制定心理治疗方案的工具,其需求和应用范围不断扩大。首先,现代社会节奏快速,......
  • (JAVA)基于TCP通信多人聊天系统
    一、目标 这个项目是一个基于TCP协议的简单多人聊天系统,包含一个服务器和多个客户端。服务器接受多个客户端的连接,每个客户端发送的消息都可以转发给其他所有在线的客户端,实现了一个基本的多人实时聊天功能。项目使用Java编程语言编写,利用ServerSocket和Socket 创建......
  • Java毕业设计-基于SSM的新生报到系统【代码+论文+PPT+开题】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、部分代码;5、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:SSM数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能个人中心:提供学生个人信息查看与编辑,以及报到进度......
  • java毕业设计-基于SSM的购物商城系统【代码+论文+PPT+开题+任务书】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、部分代码;5、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:SSM数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能个人中心:管理用户个人信息,包括资料编辑、密码修改......