【洛谷2693 [USACO1.3]号码锁 Combination Lock】【枚举】
来源:互联网 发布:金山数据恢复账号2017 编辑:程序博客网 时间:2024/05/16 00:48
Farmer John's cows keep escaping from his farm and causing mischief. To try and prevent them from leaving, he purchases a fancy combination lock to keep his cows from opening the pasture gate.
Knowing that his cows are quite clever, Farmer John wants to make sure they cannot easily open the lock by simply trying many different combinations. The lock has three dials, each numbered 1..N (1 <= N <= 100), where 1 and N are adjacent since the dials are circular. There are two combinations that open the lock, one set by Farmer John, and also a "master" combination set by the lock maker.
The lock has a small tolerance for error, however, so it will open even if the numbers on the dials are each within at most 2 positions of a valid combination.
For example, if Farmer John's combination is (1,2,3) and the master combination is (4,5,6), the lock will open if its dials are set to (1,3,5) (since this is close enough to Farmer John's combination) or to (2,4,8) (since this is close enough to the master combination). Note that (1,5,6) would not open the lock, since it is not close enough to any one single combination.
Given Farmer John's combination and the master combination, please determine the number of distinct settings for the dials that will open the lock. Order matters, so the setting (1,2,3) is distinct from (3,2,1).
PROGRAM NAME: combo
INPUT FORMAT:
Line 1:The integer N.Line 2:Three space-separated integers, specifying Farmer John's combination.Line 3:Three space-separated integers, specifying the master combination (possibly the same as Farmer John's combination).SAMPLE INPUT (file combo.in):
501 2 35 6 7
INPUT DETAILS:
Each dial is numbered 1..50. Farmer John's combination is (1,2,3), and the master combination is (5,6,7).
OUTPUT FORMAT:
Line 1:The number of distinct dial settings that will open the lock.SAMPLE OUTPUT (file combo.out):
249
SAMPLE OUTPUT EXPLANATION
Here's a list:
1,1,1 2,2,4 3,4,2 4,4,5 5,4,8 6,5,6 7,5,9 3,50,2 50,1,4 1,1,2 2,2,5 3,4,3 4,4,6 5,4,9 6,5,7 7,6,5 3,50,3 50,1,5 1,1,3 2,3,1 3,4,4 4,4,7 5,5,5 6,5,8 7,6,6 3,50,4 50,2,1 1,1,4 2,3,2 3,4,5 4,4,8 5,5,6 6,5,9 7,6,7 3,50,5 50,2,2 1,1,5 2,3,3 3,4,6 4,4,9 5,5,7 6,6,5 7,6,8 49,1,1 50,2,3 1,2,1 2,3,4 3,4,7 4,5,5 5,5,8 6,6,6 7,6,9 49,1,2 50,2,4 1,2,2 2,3,5 3,4,8 4,5,6 5,5,9 6,6,7 7,7,5 49,1,3 50,2,5 1,2,3 2,4,1 3,4,9 4,5,7 5,6,5 6,6,8 7,7,6 49,1,4 50,3,1 1,2,4 2,4,2 3,5,5 4,5,8 5,6,6 6,6,9 7,7,7 49,1,5 50,3,2 1,2,5 2,4,3 3,5,6 4,5,9 5,6,7 6,7,5 7,7,8 49,2,1 50,3,3 1,3,1 2,4,4 3,5,7 4,6,5 5,6,8 6,7,6 7,7,9 49,2,2 50,3,4 1,3,2 2,4,5 3,5,8 4,6,6 5,6,9 6,7,7 7,8,5 49,2,3 50,3,5 1,3,3 3,1,1 3,5,9 4,6,7 5,7,5 6,7,8 7,8,6 49,2,4 50,4,1 1,3,4 3,1,2 3,6,5 4,6,8 5,7,6 6,7,9 7,8,7 49,2,5 50,4,2 1,3,5 3,1,3 3,6,6 4,6,9 5,7,7 6,8,5 7,8,8 49,3,1 50,4,3 1,4,1 3,1,4 3,6,7 4,7,5 5,7,8 6,8,6 7,8,9 49,3,2 50,4,4 1,4,2 3,1,5 3,6,8 4,7,6 5,7,9 6,8,7 1,50,1 49,3,3 50,4,5 1,4,3 3,2,1 3,6,9 4,7,7 5,8,5 6,8,8 1,50,2 49,3,4 49,50,11,4,4 3,2,2 3,7,5 4,7,8 5,8,6 6,8,9 1,50,3 49,3,5 49,50,21,4,5 3,2,3 3,7,6 4,7,9 5,8,7 7,4,5 1,50,4 49,4,1 49,50,32,1,1 3,2,4 3,7,7 4,8,5 5,8,8 7,4,6 1,50,5 49,4,2 49,50,42,1,2 3,2,5 3,7,8 4,8,6 5,8,9 7,4,7 2,50,1 49,4,3 49,50,52,1,3 3,3,1 3,7,9 4,8,7 6,4,5 7,4,8 2,50,2 49,4,4 50,50,12,1,4 3,3,2 3,8,5 4,8,8 6,4,6 7,4,9 2,50,3 49,4,5 50,50,22,1,5 3,3,3 3,8,6 4,8,9 6,4,7 7,5,5 2,50,4 50,1,1 50,50,32,2,1 3,3,4 3,8,7 5,4,5 6,4,8 7,5,6 2,50,5 50,1,2 50,50,42,2,2 3,3,5 3,8,8 5,4,6 6,4,9 7,5,7 3,50,1 50,1,3 50,50,52,2,3 3,4,1 3,8,9 5,4,7 6,5,5 7,5,8
/*
ID: smsyzx.1
PROG: combo
LANG: C++
*/
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
int n;
int fj[3], master[3], cur[3]; //分别是fj的锁、锁匠的锁和当前枚举的锁
int dis(int i, int j) { //计算两个号码之间的距离(其实直接用abs搞就好)
if (i > j) swap(i, j);
return min(j - i, i + n - j);
}
bool isok(int a[], int b[]) { //是否可以用b锁打开a锁
for (int i = 0; i < 3; i++ ) {
// cout << a[i] << ' ' << b[i] << ' ' << dis(a[i], b[i]) << endl;
if (dis(a[i],b[i]) > 2) return false; //看每一位的距离是否都在2以内
}
return true;
}
int main() {
freopen("combo.in", "r", stdin);
freopen("combo.out", "w", stdout);
cin >> n;
cin >> fj[0] >> fj[1] >> fj[2];
cin >> master[0] >> master[1] >> master[2];
int ans = 0;
for (cur[0] = 1; cur[0] <= n; cur[0]++) //枚举
for (cur[1] = 1; cur[1] <= n; cur[1]++)
for (cur[2] = 1; cur[2] <= n; cur[2]++) {
// cout << cur[0] << ',' << cur[1] << ',' << cur[2] << ' ' << isok(cur, fj) << ' ' << isok(cur, master) << endl;
ans += isok(cur, fj) || isok(cur, master); //只要符合一种就行
}
cout << ans << endl;
return 0;
}
- 【洛谷2693 [USACO1.3]号码锁 Combination Lock】【枚举】
- Combination Lock 号码锁 From USACO
- USACO1.3.4 Combination Lock (combo)
- USACO1.3.4 Combination Lock (combo)
- USACO-Section1.3 Combination Lock【暴力枚举】
- USACO-section1.3 Combination Lock[枚举]
- USACO 1.3 - Combination Lock(暴力枚举)
- USACO 1.3 Combination Lock (枚举)
- USACO-Section 1.3 Combination Lock(枚举)
- 【洛谷1211 [USACO1.3]牛式 Prime Cryptarithm】【枚举】
- USACO Section1.3 Combination Lock
- USACO-Section1.3 Combination Lock
- USACO-Section1.3 Combination Lock
- Combination Lock<uscao>1.3 -<枚举>(环形用%的坑)
- Combination Lock
- Combination Lock
- USACO-Section1.3 Combination Lock[其他]
- USACO-Section1.3 Combination Lock[其他]
- 2016 年大沥镇小学青少年信息学奥林匹克竞赛反思(甲乙组)
- TestNG中的数据源DataProvider概述
- 后台开发面试 linux os
- 白书刷题记录
- 【洛谷1211 [USACO1.3]牛式 Prime Cryptarithm】【枚举】
- 【洛谷2693 [USACO1.3]号码锁 Combination Lock】【枚举】
- 树状数组模板
- 音阶(ljestvica/1S/64M)
- 波老师(teacher/1S/64M)
- 夏令营day1总结
- 爆裂吧世界(world/1S/64M)
- 【[usaco1.3] 滑雪课程设计 Ski Course Design 】【枚举】
- 海量小文件存储tfs
- POJ 3254 - Corn Fields