【搜索】$P1092$虫食算

【搜索】\(P1092\)虫食算

题目链接

首先,我们只考虑加法的虫食算。这里的加法是N进制加法,算式中三个数都有N位,允许有前导的0。

其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字母表示,不同的数字用不同的字母表示。如果这个算式是N进制的,我们就取英文字母表午的前N个大写字母来表示这个算式中的0到N-1这N个不同的数字:但是这N个字母并不一定顺序地代表0到N-1。输入数据保证N个字母分别至少出现一次。输入数据保证有且仅有一组解。

输入格式

包含四行。
第一行有一个正整数\(N(N \leq 26)\)

后面的三行,每行有一个由大写字母组成的字符串,分别代表两个加数以及和。这3个字符串左右两端都没有空格,从高位到低位,并且恰好有N位。

输出格式

一行,即唯一的那组解。

解是这样表示的:输出N个数字,分别表示A,B,C,…所代表的数字,相邻的两个数字用一个空格隔开,不能有多余的空格。

对于30%的数据,保证有\(N \leq 10\)

对于50%的数据,保证有\(N \leq 15\)

对于全部的数据,保证有\(N \leq 26\)

Solution

搜索是比较好想的。但若直接枚举全排列需要n!,那么需要剪枝。

考虑加法,进位的话只会进1,所以如果(A + B) % n != C && (A + B +1) % n != C,显然不合法。然后因为三个数都是N位,所以最高位不可能进位。

那么什么搜索顺序会更优呢?从右往左,也就是从低位到高位。从右往左,按照字母出现顺序搜索,能在很大程度上提高剪枝效率。

最后,最关键的一点,是一个exit(0)的应用。第一次知道这到底是个什么。

exit(0):正常运行程序并退出程序。 exit 是一个函数。 exit是系统调用级别的,它表示了一个进程的结束。 exit是进程的退出。 exit是操作系统提供的(或者函数库中给出的)。 exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出,非0 为非正常退出。 6. 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的。

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
long long read(){long long x = 0; int f = 0; char c = getchar();while(c < '0' || c > '9') f |= c == '-', c = getchar();while(c >= '0' && c <= '9') x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();return f? -x:x;
}int a[30], b[30], c[30], num[30], qu[30], n, cnt;
char s1[30], s2[30], s3[30];
bool used[30];
bool ok(){//最后判断一下是否满足等式for(int i = n - 1, x = 0; i >= 0; --i){int A = num[a[i]], B = num[b[i]], C = num[c[i]];if((A + B + x) % n != C) return 0;x = (A + B + x) / n;}return 1;
}
void print(){//输出printf("%d", num[0]);for(int i = 1; i < n; ++i) printf(" %d", num[i]);exit(0);//减少递归返回时间
}
void dfs(int x){if(num[a[0]] + num[b[0]] >= n) return;//最高位没有进位for(int i = n - 1; i >= 0; --i){int A = num[a[i]], B = num[b[i]], C = num[c[i]];if(A == -1 || B == -1 || C == -1) continue;if((A + B) % n != C && (A + B + 1) % n != C) return;//判每一位是否合法}if(x == n){if(ok()) print();return;}for(int i = n - 1; i >= 0; --i)if(!used[i]){num[qu[x]] = i, used[i] = 1;dfs(x + 1);num[qu[x]] = -1, used[i] = 0;//回溯}
}
void Sort(int x){//预处理递归枚举顺序if(!used[x]) used[x] = 1, qu[cnt++] = x;
}
int main(){freopen("1.txt", "r", stdin);freopen("1.out", "w", stdout);n = read();scanf("%s%s%s", s1, s2, s3);for(int i = 0; i < n; ++i)a[i] = s1[i] - 'A', b[i] = s2[i] - 'A', c[i] = s3[i] - 'A', num[i] = -1;for(int i = n - 1; i >= 0; --i){Sort(a[i]);//预处理顺序Sort(b[i]);Sort(c[i]);}for(int i = 0; i < n; ++i) used[i] = 0;dfs(0);return 0;
}

转载于:https://www.cnblogs.com/kylinbalck/p/11307087.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【译】XNA Shader 程序设计(二)

XNA Shader 程序设计 教程2 - 漫反射 大家好&#xff0c;今天我们将在教程一的基础上继续学习&#xff0c;在光照算式中加上漫反射光。 漫反射光 环境光计算等式为&#xff1a; I Aintensity * Acolor 漫反射基于这个等式&#xff0c;添加了一道有方向的光线&#xff1a; I A…

Jquery基础之DOM操作

Dom是Document Object Model的缩写&#xff0c;意思是文档对象模型。DOM是一种与浏览器、平台、语言无关的接口&#xff0c;使用该接口可以轻松访问页面中所有的标准组件。DOM操作可以分为三个方面即DOM Core(核心)、HTM-DOM和CSS-DOM。 JQuery中的DOM操作主要对包括&#xff…

linux 下 `dirname $0` shell 获取当前正在执行脚本的绝对路径

【】&#xff0c;学名叫“倒引号”&#xff0c; 如果被“倒引号”括起来&#xff0c; 表示里面需要执行的是命令。比如 dirname $0&#xff0c; 就表示需要执行 dirname $0 这个命令【“”】 &#xff0c; 被双引号括起来的内容&#xff0c; 里面 出现 $ (美元号&#xf…

具有angularjs资源的Spring Rest Controller

Angularjs ngResource是用于与基于REST的服务进行交互的angularjs模块。 我最近在Spring MVC的一个小型项目中使用了它&#xff0c;并希望记录一个对我来说很好的配置。 该控制器在工厂中运行&#xff0c;它支持在酒店实体上进行CRUD操作&#xff0c;并支持以下方法&#xff1…

PAT乙级1023

题目链接 https://pintia.cn/problem-sets/994805260223102976/problems/994805298269634560 题解 主要就是控制首位不能为0&#xff0c;其他的都很简单&#xff0c;就遍历然后往尾部加数字就好了。 // PAT BasicLevel 1023 // https://pintia.cn/problem-sets/994805260223102…

js中var、let、const区别

//1.var定义的变量可以修改&#xff0c;如果不初始化会输出undefined&#xff0c;不会报错。 var a; console.log(a); //undefined//2.let是块级作用域&#xff0c;函数内部使用let定义后&#xff0c;对函数外部无影响。 let c 3; console.log(c)function change(){ let c 6;…

2000错误信息:MMC创建无法管理单元。

系统Vista&#xff0c;安装了SQL Server 2000 SP4&#xff0c;然后安装了Microsoft SQL Server 2005。后因系统太慢&#xff0c;卸载SQL SERVER2005,结果在打开 SQLServer2000的 企业管理器&#xff0c;收到以下错误信息&#xff1a;MMC创建无法管理单元。到网上寻找了以后&…

A股滚动净利润增速最高排名

最近2年&#xff08;共8个季度&#xff09;的滚动净利润都在增长&#xff0c;且平均增速超过10%。 计算举例&#xff1a;滚动净利润增速 ((2018Q1 到 2018Q4的净利润之和) / (2017Q4 到 2018Q3的净利润之和) -1) * 100%。 预测下季度&#xff1a;依据以往的增速&#xff0c;进…

Java 8 Friday:让我们弃用那些旧版库

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的Java 8新功能&#…

Navicat for MySQL v8.0.27 的注册码

Navicat for MySQL v8.0.27 的注册码 Navicat是一个强大的MySQL数据库管理和开发工具。Navicat为专业开发者提供了一套强大的足够尖端的工具&#xff0c;但它对于新用户仍然是易于学习。Navicat,使用了极好的图形用户界面&#xff08;GUI&#xff09;&#xff0c;可以让你用一种…

Educational Codeforces Round 10

652A - Gabriel and Caterpillar 20171128 按题意模拟即可 #include<stdlib.h> #include<stdio.h> #include<math.h> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int h1,h2,a,b,ans1; int main()…

内存不足:杀死进程或牺牲孩子

现在是早上6点。 我清醒地总结了导致我太早醒来的电话的事件序列。 这些故事开始时&#xff0c;我的电话警报响了。 困倦而脾气暴躁的我检查了电话&#xff0c;看我是否真的疯了以至于无法在凌晨5点设置唤醒警报。 不&#xff0c;这是我们的监视系统&#xff0c;表明Plumbr服务…

前端优化

加快网站的最佳实践 最小化HTTP请求 终端用户响应时间的80&#xff05;用于前端。大部分时间都在下载页面中的所有组件&#xff1a;图像&#xff0c;样式表&#xff0c;脚本&#xff0c;Flash等。减少组件数量又会减少呈现页面所需的HTTP请求数量。这是更快页面的关键。 组合…

将Array、Dictionary等集合类的序列化和反序列化

Objective-C的集合类序列化到文件中或者从文件中反序列化其实很简单&#xff0c;请看下面的示例代码&#xff1a; NSArray *array [NSArray arrayWithObjects:"Hefeweizen", "IPA", "Pilsner", "Stout", nil];NSDictionary *dictiona…

职场交流:一位软件工程师的7年总结

2009年05月13日15:06  来源&#xff1a;1、分享第一条经验&#xff1a;“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友 对这个道理有些体会吧。但我相信这一点也很重要&#xff1a;“重要的道理…

使用自定义断言丰富测试代码

受GeeCON会议期间tkaczanowski演讲的启发&#xff0c;我决定仔细研究AssertJ库的自定义断言。 在我的“骰子”游戏中&#xff0c;我创建了一个“机会”&#xff0c;它是骰子的任意组合&#xff0c;其分数是所有骰子的总和。 这是相对简单的对象&#xff1a; class Chance imp…

js判断数据类型

在js中如果想判断某种数据的数据类型&#xff0c;一般使用typeof方法 var str "string";var num 1;var bool true;var u;var n null;var nan NaN;var obj new Object();var fn function () {};console.log(typeof str); //stringconsole.log(typeof num); //n…

Elasticsearch 索引别名的使用

几种常用方式&#xff1a; 1.定时更新别名指向&#xff0c;更新后原索引可删除或保留 POST /_aliases {"actions": [{"add": {"alias": "logs_current","index": "logs_2018-10"}},{"remove": {"a…

Python的win32serviceutil之疑似BUG

郑昀玩聚SR 20090515 1、现象&#xff1a; 用Python的win32serviceutil控制Windows Service启动、停止、重启时&#xff0c;如下代码一般是没问题的。 import win32serviceutil def service_manager(action, machine, service): if action stop: win32serviceutil…

JavaFX 8u20天的未来过去(始终在最前面)

自从我发布有关JavaFX的主题以来已经有很长时间了。 因此&#xff0c;如果您仍在追随&#xff0c;那就太棒了&#xff01; 介绍 在这篇博客文章中&#xff0c;我想写一篇关于从JavaFX 8 update 20开始的非常酷的功能的博客&#xff0c;该功能使您的应用程序始终位于其他应用程…