破门锁


几年前,在孙老大担任GDUTACM集训队教练之前,集训队的日子过得非常惨淡,实验室的桌子非常老旧,动不动就塌,集训队员们也是苦不堪言。幸运的是,在孙老大的领导下,集训队的日子走向了小康,所有东西都渐渐的有了,打印机(当然是激光的)什么的,高速上网(10+M每秒的下载)什么的。更加重要的是,集训队出去比赛的经费翻了几番,并且看起来肯定还会继续增长,总之,集训队正在大踏步向前飞奔。

    沐浴在改革开放的春风里,月亮在白棉花般的云朵里穿行,晚风吹来一阵阵快乐的歌声,队员们坐在高高的谷堆旁边,听孙老大讲过去的故事。

    那时候,集训队没有门锁,大家只能用一个不知道用了多久的密码锁来锁门(就是锁单车那一种),这个密码锁有3位,每位有1N共计N个数字,其中1N相邻(因为是个圈),密码锁有一个用户密码(A1,B1,C1),也有一个工厂密码(A2,B2,C2)(因为是冒牌厂商做的,所以比较坑爹= =)。更坑爹的是,由于年久失修,当开门的人使用的密码和正确密码的每一位相差都不超过2的时候,门锁就会打开。(摔~!)

    比如用户密码是(1,2,3),工厂密码是(4,5,6)N9,这个时候,如果使用密码(1,9,5)门锁就会被打开,因为它和用户密码分别相差了(0,2,2)。同理,密码(2,4,8)也可以开门,因为它和工厂密码的差距分别为(2,1,2)。但是(1,5,6)就不可以了,因为它和用户密码的差距为(0,3,3),和工厂密码的差距为(3,0,0)

    现在,孙老大问你,一共有多少个密码可以打开这个破门锁。

Input

输入数据的第一行只有一个数字,表示测试数据的数量。

接下来每组数据占3行。

第一行只有一个数字N(1<=N<=100)。。

接下来一行有三个数字,表示用户密码。。

第三行有三个数字,表示工厂密码。。

Output

每组数据输出一行,表示一共有多少个密码可以开锁。

Sample Input

1
50
1 2 3
5 6 7

Sample Output

249

AC代码:

每一组数据最多有250个答案,5*5*5*2,
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int N;
int tt(int a,int b){  //求出重复的数字个数
	int t,q,w;
	if(a>b){
		t=a;
		a=b;
		b=t;
	}
	q=b-a;
	w=N+a-b;
	q=min(q,5);   //最多只能为5
	w=min(w,5);
	return 10-q-w;
}
int main()
{
	int t,i,j;
	int a[3],b[3];
	while(cin>>t)
	while(t--){
		cin>>N;
		for(i=0;i<3;i++)
     	cin>>a[i];
    	for(i=0;i<3;i++)
    	cin>>b[i];
		if(N>5){
			j=1;
	    	for(i=0;i<3;i++)
	    	j*=tt(a[i],b[i]);
	    	cout<<250-j<<endl;
		}
		else cout<<pow(N,3)<<endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值