【洛谷 P1618】三连击(升级版)题解(深度优先搜索+位集合)

news/2024/7/20 20:58:56 标签: 深度优先, 算法, c++

三连击(升级版)

题目描述

1 , 2 , … , 9 1, 2,\ldots, 9 1,2,,9 9 9 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A : B : C A:B:C A:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!

//感谢黄小U饮品完善题意

输入格式

三个数, A , B , C A,B,C A,B,C

输出格式

若干行,每行 3 3 3 个数字。按照每行第一个数字升序排列。

样例 #1

样例输入 #1

1 2 3

样例输出 #1

192 384 576
219 438 657
273 546 819
327 654 981

提示

保证 A < B < C A<B<C A<B<C


upd 2022.8.3 \text{upd 2022.8.3} upd 2022.8.3:新增加二组 Hack 数据。

思路

搜索得到全排列,用乘法判断是否符合比例关系。

AC代码

#include <iostream>
#include <bitset>
#include <cmath>
#define AUTHOR "HEX9CF"
using namespace std;

int a, b, c;
int x, y, z;
bitset<15> bs;
int arr[15];
int flg;

void f()
{
    if (9 == bs.count())
    {
        a = 0;
        b = 0;
        c = 0;
        for (int i = 0; i < 3; i++)
        {
            a += arr[i + 1] * pow(10, 2 - i);
            b += arr[i + 4] * pow(10, 2 - i);
            c += arr[i + 7] * pow(10, 2 - i);
        }
        if ((a * y == b * x) && (a * z == c * x) && (b * z == c * y))
        {
            cout << a << " " << b << " " << c << endl;
            flg = 1;
        }
        return;
    }
    for (int i = 1; i <= 9; i++)
    {
        if (!bs[i])
        {
            bs[i] = 1;
            arr[bs.count()] = i;
            f();
            bs[i] = 0;
        }
    }
}

int main()
{
    bs.reset();
    cin >> x >> y >> z;
    f();
    if(!flg){
        cout << "No!!!" << endl;
    }
    return 0;
}

http://www.niftyadmin.cn/n/115963.html

相关文章

(哈希查找)leetcode290. 单词规律

文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识一、题目 1、题目描述 给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xf…

KingabseES 隐式游标属性值(SQL%attribute)

隐式游标介绍 Oracle数据库迁移到KingbaseES数据库&#xff0c;不需要将源PL/SQL脚本&#xff0c;大规模修改为KES语法&#xff0c;因为KingbaseES支持大部分PLSQL语法。 1、隐式游标 隐式游标是由 PL/SQL 构造和管理的会话游标。 每次运行 SELECT 或 DML 语句时&#xff0c;PL…

LeetCode 热题 C++ 312. 戳气球 322. 零钱兑换

LeetCode312 有 n 个气球&#xff0c;编号为0 到 n - 1&#xff0c;每个气球上都标有一个数字&#xff0c;这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球&#xff0c;你可以获得 nums[i - 1] * nums[i] * nums[i 1] 枚硬币。 这里的 i - 1 和 i 1…

python-星号(*)-双星号(**)-函数动态参数匹配-解包操作

文章目录1.乘法和幂运算符2.函数接收数量不固定的入参3.限制函数入参仅以关键字形式输入4. 可迭代对象解包操作5.扩展可迭代对象解包1.乘法和幂运算符 ● 单个 * 用于乘法运算 ● 两个 ** 表示幂运算 >>> 2*3 >>> 6 >>> 2**3 >>> 82.函数…

14.Focal Loss

欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 文章目录1.基础介绍2.Focal Loss2.1常规二分类交叉熵2.2 Focal Loss解读3.源码实现参考资料1.基础介绍 论文:Focal Loss for Dense Object Detection 这篇论文是HeKaiMing团队&#xff0c;2…

惠普战66pro如何选购内存条?一篇文章讲解清楚

笔记本&#xff1a;惠普 ZHAN66 PRO CPU&#xff1a;Intel Core™ i-8565U CPU 1.80GHz 内存条&#xff1a;Samsung PS: 如果有需要更换硬盘的可以看我之前发的文章&#xff0c;博主进行了长时间的测试。 硬盘选购长测评 文章目录前言一、内存是什么&#xff1f;二、如何操作呢…

Scrapy爬虫框架入门

Scrapy是Python开发的一个非常流行的网络爬虫框架&#xff0c;可以用来抓取Web站点并从页面中提取结构化的数据&#xff0c;被广泛的用于数据挖掘、数据监测和自动化测试等领域。下图展示了Scrapy的基本架构&#xff0c;其中包含了主要组件和系统的数据处理流程&#xff08;图中…

leetcode389. 找不同

文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识一、题目 1、题目描述 给定两个字符串 s 和 t &#xff0c;它们只包含小写字母。 字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添加一个字母。…