数论 - Funny scales(SPOJ - SCALE)

简介: Funny scales  Problem's Link  ---------------------------------------------------------------------------- Mean:  给定两个数n和x,有一个天平,初始时左盘为x,你需要从以下集合中选一些数字来放到两个盘中,使得两个盘相等(note:每个数字只能取一次)。

Funny scales 

Problem's Link

 ----------------------------------------------------------------------------

Mean: 

给定两个数n和x,有一个天平,初始时左盘为x,你需要从以下集合中选一些数字来放到两个盘中,使得两个盘相等(note:每个数字只能取一次)。

analyse:

即:

 将X化为3进制:

但是题目说每个3^i必须为1,所以我们需要将X表示成的等式的每一项的系数变为1,这就是本题的关键。

方法:

  • 将X化为3进制的过程中,每一项的集合为{0,1,2} ,当遇到2时,将2表示成3-1的形式,即:向前进移位,本位置位-1。

如此一来便很好的处理了系数重复的问题,而且最后统计答案时,根据系数的符号来划分集合即可。

Time complexity: O(N)

 

view code

#include <cstdio>
const int MAXL = 100;

int N , X;
int A [ MAXL ], lenA;
int B [ MAXL ], lenB;
int dig [ MAXL ];

int main()
{

    scanf( "%d %d" , &N , & X );

    for ( int i = 0; X != 0; i ++ )
    {
        dig [ i ] += X % 3;
        if ( dig [ i ] > 1 )
        {
            dig [ i + 1 ] ++;
            dig [ i ] = dig [ i ] - 3;
        }
        X /= 3;
    }

    for ( int i = MAXL - 1; i >= 0; i -- )
    if ( dig [ i ] != 0 )
        if ( dig [ i ] == - 1 )
            A [ lenA ++ ] = i + 1;
        else if ( dig [ i ] == + 1 )
           B [ lenB ++ ] = i + 1;

    if ( A [ 0 ] > N || B [ 0 ] > N )
        printf( "-1 \n " );
    else
    {
        for ( int i = lenA - 1; i >= 0; i -- )
        printf( i ? "%d " : "%d" , A [ i ] );
        printf( " \n " );
        for ( int i = lenB - 1; i >= 0; i -- )
        printf( i ? "%d " : "%d" , B [ i ] );
        printf( " \n " );
    }
    return 0;
}
目录
相关文章
|
机器学习/深度学习 算法 程序员
GitHub:代码世界的来世今生
GitHub:代码世界的来世今生
141 1
|
分布式计算 DataWorks 数据建模
DataWorks常见问题之如何批量修改集成资源组
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
169 1
|
Python
Python编程 pip换源
本章将会讲解pip换源的安装方法
780 0
Python编程 pip换源
|
Rust 安全 图形学
Rust图形革新:2D与3D编程的全新体验,它能否颠覆传统?
【8月更文挑战第31天】随着Rust语言的日益成熟,其在图形编程领域的应用逐渐增多。本文将探讨Rust在图形编程中的表现,从2D扩展至3D。通过使用`pixman`库处理2D图形,以及借助`naga`库实现3D渲染,展示了Rust在图形编程中的潜力。尽管与C++相比,Rust的生态仍在发展中,但其安全性与性能使其成为图形编程的重要工具之一,值得开发者关注和学习。
477 0
|
监控 Java 测试技术
在多线程开发中,线程死循环可能导致系统资源耗尽,影响应用性能和稳定性
【5月更文挑战第16天】在多线程开发中,线程死循环可能导致系统资源耗尽,影响应用性能和稳定性。为解决这一问题,建议通过日志记录、线程监控工具和堆栈跟踪来定位死循环;处理时,及时终止线程、清理资源并添加错误处理机制;编码阶段要避免无限循环,正确使用同步互斥,进行代码审查和测试,以降低风险。
238 3
|
监控 Java 开发者
实现Java微服务架构下的服务熔断与降级
实现Java微服务架构下的服务熔断与降级
|
Java 编译器 Maven
SpringBoot(二)之parent解析
默认配置spring-boot-maven-plugin,简化构建spring-boot的构建流程。
713 1
|
安全 NoSQL Linux
Kali Linux进行恶意代码分析
Kali Linux进行恶意代码分析
503 0
|
存储 关系型数据库 API
Python 任务自动化工具:nox 的配置与 API
Python 任务自动化工具:nox 的配置与 API
117 0
|
数据采集 机器学习/深度学习 自然语言处理
Huggingface Transformers各类库介绍(Tokenizer、Pipeline)
Huggingface Transformers各类库介绍(Tokenizer、Pipeline)