Combination Lock

探讨一个复杂的号码锁问题,涉及组合数学原理,通过分析农夫约翰的号码组合与预设号码组合,计算所有可能开锁的组合数量。代码实现采用C++,展示了如何遍历并判断每个可能的组合。

题目描述
农夫约翰的奶牛不停地从他的农场中逃出来,导致了很多损害。为了防止它们再逃出来,他买了一只很大的号码锁以防止奶牛们打开牧场的门。 
农夫约翰知道他的奶牛很聪明,所以他希望确保它们不会在简单地试了很多不同的号码组合之后就能轻易开锁。锁上有三个转盘,每个上面有数字1..N (1 <= N <= 100),因为转盘是圆的,所以1和N是相邻的。有两种能开锁的号码组合,一种是农夫约翰设定的,还有一种“预设”号码组合是锁匠设定的。但是,锁有一定的容错性,所以,在每个转盘上的数字都与一个合法的号码组合中相应的数字相距两个位置以内时,锁也会打开。 
比如说,如果农夫约翰的号码组合是(1,2,3),预设号码组合是(4,5,6),在转盘被设定为(1,4,5)(因为这和农夫约翰的号码组合足够接近)或(2,4,8)(因为这和预设号码组合足够接近)。注意,(1,5,6)并不会打开锁,因为它与任一号码组合都不够接近。 
给出农夫约翰的号码组合和预设号码组合,请计算能够开锁的不同的号码组合的数目。号码是有序的,所以(1,2,3)与(3,2,1)不同。

输入输出格式
输入格式:
第一行:整数N。 
第二行:三个以空格分隔的整数,为农夫约翰的号码组合。 
第三行:三个以空格分隔的整数,为预设号码组合(可能与农夫约翰的号码组合相同)。

输出格式:
第一行:所有不同的能够开锁的号码组合的总数。

输入输出样例
输入样例#1:
50 
1 2 3 
5 6 7

输出样例#1:
249

这题特地附了题意,因为看懂题意真的超级重要啊。先开始没有读懂那句“ even if the numbers on the dials are each within at most 2 positions of a valid combination”,完全不知道这是啥玩意。

后来知道了对应位置的差值不超过2就可以开锁。

然后这个跟组合数学有那么一点点关系。如果n > 5, 且farmer和master给出的相同位置的数字完全不同的话。则有 5 * 5 * 5 * 2 = 250种可以开锁。

所以只需要统计重复的然后减去就好了。

不过,当 n < 5 的时候, 每个数字自己 + 上下各加

/**/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <stack>
#include <queue>

typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int N = 102;
int n, cal;
bool mark[N][N][N];

struct node
{
	int a, b, c;
};

node h1, h2;

int mode(int x) {return (x + n) % n;}

int main()
{
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
	memset(mark, 0, sizeof(mark));
	cal = 0;
	scanf("%d", &n);
	scanf("%d%d%d", &h1.a, &h1.b, &h1.c);
	scanf("%d%d%d", &h2.a, &h2.b, &h2.c);
	if(n < 5)	{printf("%d\n", n * n * n); return 0;}
	for(int i = h1.a - 2; i <= h1.a + 2; i++)
		for(int j = h1.b - 2; j <= h1.b + 2; j++)
			for(int k = h1.c - 2; k <= h1.c + 2; k++)
				mark[mode(i)][mode(j)][mode(k)] = 1;
	for(int i = h2.a - 2; i <= h2.a + 2; i++)
		for(int j = h2.b - 2; j <= h2.b + 2; j++)
			for(int k = h2.c - 2; k <= h2.c + 2; k++)
				if(mark[mode(i)][mode(j)][mode(k)] == 1)
					cal++;
	printf("%d\n", 250 - cal);

	return 0;
}
/**/

, 不足5个数字, 所以要另外给一段计算。

 

 

 

CREATE DATABASE IF NOT EXISTS crashcourse; /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ USE crashcourse; -- MySQL dump 10.13 Distrib 8.0.31, for Win64 (x86_64) -- -- Host: localhost Database: crashcourse -- ------------------------------------------------------ -- Server version 8.0.31 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!50503 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `customers` -- DROP TABLE IF EXISTS customers; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE customers( cust_id INT NOT NULL AUTO_INCREMENT, cust_name CHAR(50) NOT NULL, cust_address CHAR(50) DEFAULT NULL, cust_city CHAR(50) DEFAULT NULL, cust_state CHAR(5) DEFAULT NULL, cust_zip CHAR(10) DEFAULT NULL, cust_country CHAR(50) DEFAULT NULL, cust_contact CHAR(50) DEFAULT NULL, cust_email CHAR(255) DEFAULT NULL, PRIMARY KEY (cust_id) ) ENGINE=INNODB AUTO_INCREMENT=10006 DEFAULT CHARSET=utf8mb4;-- COLLATE=utf8mb4_0900_ai_ci /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `customers` -- LOCK TABLES customers WRITE; /*!40000 ALTER TABLE `customers` DISABLE KEYS */; INSERT INTO customers VALUES (10001,'Coyote Inc.','200 Maple Lane','Detroit','MI','44444','USA','Y Lee','ylee@coyote.com'),(10002,'Mouse House','333 Fromage Lane','Columbus','OH','43333','USA','Jerry Mouse',NULL),(10003,'Wascals','1 Sunny Place','Muncie','IN','42222','USA','Jim Jones','rabbit@wascally.com'),(10004,'Yosemite Place','829 Riverside Drive','Phoenix','AZ','88888','USA','Y Sam','sam@yosemite.com'),(10005,'E Fudd','4545 53rd Street','Chicago','IL','54545','USA','E Fudd',NULL); /*!40000 ALTER TABLE `customers` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `orderitems` -- DROP TABLE IF EXISTS orderitems; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE orderitems ( order_num INT NOT NULL, order_item INT NOT NULL, prod_id CHAR(10) NOT NULL, quantity INT NOT NULL, item_price DECIMAL(8,2) NOT NULL, PRIMARY KEY (order_num,order_item), KEY fk_orderitems_products (prod_id), CONSTRAINT fk_orderitems_orders FOREIGN KEY (order_num) REFERENCES orders (order_num), CONSTRAINT fk_orderitems_products FOREIGN KEY (prod_id) REFERENCES products (prod_id) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 ; -- COLLATE=utf8mb4_0900_ai_ci /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `orderitems` -- LOCK TABLES orderitems WRITE; /*!40000 ALTER TABLE `orderitems` DISABLE KEYS */; INSERT INTO orderitems VALUES (20005,1,'ANV01',10,5.99),(20005,2,'ANV02',3,9.99),(20005,3,'TNT2',5,10.00),(20005,4,'FB',1,10.00),(20006,1,'JP2000',1,55.00),(20007,1,'TNT2',100,10.00),(20008,1,'FC',50,2.50),(20009,1,'FB',1,10.00),(20009,2,'OL1',1,8.99),(20009,3,'SLING',1,4.49),(20009,4,'ANV03',1,14.99); /*!40000 ALTER TABLE `orderitems` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `orders` -- DROP TABLE IF EXISTS orders; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE orders ( order_num INT NOT NULL AUTO_INCREMENT, order_date DATETIME NOT NULL, cust_id INT NOT NULL, PRIMARY KEY (order_num), KEY fk_orders_customers (cust_id), CONSTRAINT fk_orders_customers FOREIGN KEY (cust_id) REFERENCES customers (cust_id) ) ENGINE=INNODB AUTO_INCREMENT=20010 DEFAULT CHARSET=utf8mb4 ;-- COLLATE=utf8mb4_0900_ai_ci /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `orders` -- LOCK TABLES orders WRITE; /*!40000 ALTER TABLE `orders` DISABLE KEYS */; INSERT INTO orders VALUES (20005,'2023-09-01 00:00:00',10001),(20006,'2023-09-12 00:00:00',10003),(20007,'2023-09-30 00:00:00',10004),(20008,'2023-10-03 00:00:00',10005),(20009,'2023-10-08 00:00:00',10001); /*!40000 ALTER TABLE `orders` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `productnotes` -- DROP TABLE IF EXISTS `productnotes`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `productnotes` ( `note_id` INT NOT NULL AUTO_INCREMENT, `prod_id` CHAR(10) NOT NULL, `note_date` DATETIME NOT NULL, `note_text` TEXT, PRIMARY KEY (`note_id`), FULLTEXT KEY `note_text` (`note_text`) ) ENGINE=MYISAM AUTO_INCREMENT=115 DEFAULT CHARSET=utf8mb4;-- COLLATE=utf8mb4_0900_ai_ci /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `productnotes` -- LOCK TABLES `productnotes` WRITE; /*!40000 ALTER TABLE `productnotes` DISABLE KEYS */; INSERT INTO `productnotes` VALUES (101,'TNT2','2023-08-17 00:00:00','Customer complaint:\nSticks not individually wrapped, too easy to mistakenly detonate all at once.\nRecommend individual wrapping.'),(102,'OL1','2023-08-18 00:00:00','Can shipped full, refills not available.\nNeed to order new can if refill needed.'),(103,'SAFE','2023-08-18 00:00:00','Safe is combination locked, combination not provided with safe.\nThis is rarely a problem as safes are typically blown up or dropped by customers.'),(104,'FC','2023-08-19 00:00:00','Quantity varies, sold by the sack load.\nAll guaranteed to be bright and orange, and suitable for use as rabbit bait.'),(105,'TNT2','2023-08-20 00:00:00','Included fuses are short and have been known to detonate too quickly for some customers.\nLonger fuses are available (item FU1) and should be recommended.'),(106,'TNT2','2023-08-22 00:00:00','Matches not included, recommend purchase of matches or detonator (item DTNTR).'),(107,'SAFE','2023-08-23 00:00:00','Please note that no returns will be accepted if safe opened using explosives.'),(108,'ANV01','2023-08-25 00:00:00','Multiple customer returns, anvils failing to drop fast enough or falling backwards on purchaser. Recommend that customer considers using heavier anvils.'),(109,'ANV03','2023-09-01 00:00:00','Item is extremely heavy. Designed for dropping, not recommended for use with slings, ropes, pulleys, or tightropes.'),(110,'FC','2023-09-01 00:00:00','Customer complaint: rabbit has been able to detect trap, food apparently less effective now.'),(111,'SLING','2023-09-02 00:00:00','Shipped unassembled, requires common tools (including oversized hammer).'),(112,'SAFE','2023-09-02 00:00:00','Customer complaint:\nCircular hole in safe floor can apparently be easily cut with handsaw.'),(113,'ANV01','2023-09-05 00:00:00','Customer complaint:\nNot heavy enough to generate flying stars around head of victim. If being purchased for dropping, recommend ANV02 or ANV03 instead.'),(114,'SAFE','2023-09-07 00:00:00','Call from individual trapped in safe plummeting to the ground, suggests an escape hatch be added.\nComment forwarded to vendor.'); /*!40000 ALTER TABLE `productnotes` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `products` -- DROP TABLE IF EXISTS `products`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `products` ( `prod_id` CHAR(10) NOT NULL, `vend_id` INT NOT NULL, `prod_name` CHAR(255) NOT NULL, `prod_price` DECIMAL(8,2) NOT NULL, `prod_desc` TEXT, PRIMARY KEY (`prod_id`), KEY `fk_products_vendors` (`vend_id`), CONSTRAINT `fk_products_vendors` FOREIGN KEY (`vend_id`) REFERENCES `vendors` (`vend_id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 ;-- COLLATE=utf8mb4_0900_ai_ci /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `products` -- LOCK TABLES `products` WRITE; /*!40000 ALTER TABLE `products` DISABLE KEYS */; INSERT INTO `products` VALUES ('ANV01',1001,'.5 ton anvil',5.99,'.5 ton anvil, black, complete with handy hook'),('ANV02',1001,'1 ton anvil',9.99,'1 ton anvil, black, complete with handy hook and carrying case'),('ANV03',1001,'2 ton anvil',14.99,'2 ton anvil, black, complete with handy hook and carrying case'),('DTNTR',1003,'Detonator',13.00,'Detonator (plunger powered), fuses not included'),('FB',1003,'Bird seed',10.00,'Large bag (suitable for road runners)'),('FC',1003,'Carrots',2.50,'Carrots (rabbit hunting season only)'),('FU1',1002,'Fuses',3.42,'1 dozen, extra long'),('JP1000',1005,'JetPack 1000',35.00,'JetPack 1000, intended for single use'),('JP2000',1005,'JetPack 2000',55.00,'JetPack 2000, multi-use'),('OL1',1002,'Oil can',8.99,'Oil can, red'),('SAFE',1003,'Safe',50.00,'Safe with combination lock'),('SLING',1003,'Sling',4.49,'Sling, one size fits all'),('TNT1',1003,'TNT (1 stick)',2.50,'TNT, red, single stick'),('TNT2',1003,'TNT (5 sticks)',10.00,'TNT, red, pack of 10 sticks'); /*!40000 ALTER TABLE `products` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `vendors` -- DROP TABLE IF EXISTS `vendors`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `vendors` ( `vend_id` INT NOT NULL AUTO_INCREMENT, `vend_name` CHAR(50) NOT NULL, `vend_address` CHAR(50) DEFAULT NULL, `vend_city` CHAR(50) DEFAULT NULL, `vend_state` CHAR(5) DEFAULT NULL, `vend_zip` CHAR(10) DEFAULT NULL, `vend_country` CHAR(50) DEFAULT NULL, PRIMARY KEY (`vend_id`) ) ENGINE=INNODB AUTO_INCREMENT=1007 DEFAULT CHARSET=utf8mb4; -- COLLATE=utf8mb4_0900_ai_ci /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `vendors` -- LOCK TABLES `vendors` WRITE; /*!40000 ALTER TABLE `vendors` DISABLE KEYS */; INSERT INTO `vendors` VALUES (1001,'Anvils R Us','123 Main Street','Southfield','MI','48075','USA'),(1002,'LT Supplies','500 Park Street','Anytown','OH','44333','USA'),(1003,'ACME','555 High Street','Los Angeles','CA','90046','USA'),(1004,'Furball Inc.','1000 5th Avenue','New York','NY','11111','USA'),(1005,'Jet Set','42 Galaxy Road','London',NULL,'N16 6PS','England'),(1006,'Jouets Et Ours','1 Rue Amusement','Paris',NULL,'45678','France'); /*!40000 ALTER TABLE `vendors` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2023-06-01 11:51:12 查询:CREATE TABLE orderitems ( order_num int NOT NULL, order_item int NOT NULL, prod_id char(10) NOT NULL, quantity int NOT NULL, ite... 错误代码: 1215 Cannot add foreign key constraint
最新发布
09-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值