AcWing 1351. 密码锁

农夫约翰的奶牛们总是偷偷的逃出他的农场,去外面为非作歹。

农夫约翰为了防止它们私自逃离农场,购买了一个密码锁,以此阻止奶牛们打开农场大门。

约翰知道他的奶牛们都非常聪明,因此他想要确保它们不能通过简单的尝试一些密码组合,就轻易的将锁打开。

锁具上有三个密码拨盘,每个拨盘上的数字为 1…N1…N,其中 11 和 NN 相邻(因为拨盘是圆形的)。

一共有两种可以打开密码锁的数字组合,一组是约翰设置的密码组合,一组是制造商设置的密码组合。

这种锁具有一定的容错性,只要三个表盘上的数字与任意一组正确密码组合的对应位置数字相距两个位置以内,锁均会打开。

例如,假设约翰设置的密码组合是 (1,2,3)(1,2,3),制造商设置的密码组合是 (4,5,6)(4,5,6)。

此时我们输入组合 (1,3,5)(1,3,5) 就可以将锁打开,因为这与约翰设置的密码接近,输入组合 (2,4,8)(2,4,8) 也可以将锁打开,因为这与制造商设置的密码接近。

但是,如果我们输入组合 (1,5,6)(1,5,6) 就不能将锁打开,因为它和两个密码都不接近。

现在给定你两个设置好的密码,请你判断一共有多少种密码组合可以将锁打开。

注意,密码组合是有序的,因此 (1,2,3)(1,2,3) 和 (3,2,1)(3,2,1) 是两种不同的组合。

输入格式

第一行包含整数 NN。

第二行包含三个整数,表示约翰设置的密码组合。

第三行包含三个整数,表示制造商设置的密码组合。

输出格式

输出一个整数,表示可以打开锁的密码组合数量。

数据范围

1≤N≤1001≤N≤100

输入样例:

50
1 2 3
5 6 7

输出样例:

249

 

#include <iostream>
#include <cmath>
#include <algorithm>
#include <set>
using namespace std;
set<int> a;
set<int> b;
set<int> c;

int main()
{
    int x, y, z;
    int N, k = 2;
    cin >> N;
    if(N <= 5)
    {
        cout << pow(N, 3);
        return 0;
    }
    else
    {
        while(k -- ){
        cin >> x >> y >> z;
        for(int i = -2; i <= 2; i ++ ){
            a.insert((x + i + N) % N);
            b.insert((y + i + N) % N);
            c.insert((z + i + N) % N);
            }
        }
        int A = 10 - a.size();
        int B = 10 - b.size();
        int C = 10 - c.size();
        //cout << c.size() << endl;
        cout << 250 - (A * B * C);
    }
    //cout << .begin();
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值