首页 > 代码库 > USACO 1.3 Combination Lock (枚举)

USACO 1.3 Combination Lock (枚举)

描述

农夫约翰的奶牛不停地从他的农场中逃出来,导致了很多损害。为了防止它们再逃出来,他买了一只很大的号码锁以防止奶牛们打开牧场的门。

农夫约翰知道他的奶牛很聪明,所以他希望确保它们不会在简单地试了很多不同的号码组合之后就能轻易开锁。锁上有三个转盘,每个上面有数字1..N (1 <= N <= 100),因为转盘是圆的,所以1和N是相邻的。有两种能开锁的号码组合,一种是农夫约翰设定的,还有一种“预设”号码组合是锁匠设定的。但是,锁有一定的容错性,所以,在每个转盘上的数字都与一个合法的号码组合中相应的数字相距两个位置以内时,锁也会打开。

比如说,如果农夫约翰的号码组合是(1,2,3),预设号码组合是(4,5,6),在转盘被设定为(1,N,5)(因为这和农夫约翰的号码组合足够接近)或(2,4,8)(因为这和预设号码组合足够接近)。注意,(1,5,6)并不会打开锁,因为它与任一号码组合都不够接近。

给出农夫约翰的号码组合和预设号码组合,请计算能够开锁的不同的号码组合的数目。号码是有序的,所以(1,2,3)与(3,2,1)不同。

[编辑]格式

PROGRAM NAME: combo

INPUT FORMAT:

(file combo.in)

第一行:整数N。

第二行:三个以空格分隔的整数,为农夫约翰的号码组合。

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

OUTPUT FORMAT:

(file combo.out)

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

[编辑]SAMPLE INPUT

50
1 2 3
5 6 7

[编辑]SAMPLE OUTPUT

249

/*
  ID:twd30651
  PROG:combo
  LANG:C++
*/
#include<iostream>
#include<fstream>
#include<math.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int N;
int NUM[101][101][101];
int d1[3];
int d2[3];
inline int check(int m,int n)
{
    if(abs(m-n)<=2)return 1;
    if(abs(m-n)>=N-2)return 1;
    return 0;
}
int main(int argc,char *argv[])
{
    int count=0;
    freopen("combo.in","r",stdin);
    freopen("combo.out","w",stdout);
    scanf("%d",&N);
    memset(NUM,0,sizeof(NUM));
    for(int i=0;i<3;++i)
        scanf("%d",&d1[i]);
    for(int i=0;i<3;++i)
        scanf("%d",&d2[i]);
    for(int i=1;i<=N;++i)
        for(int j=1;j<=N;++j)
            for(int k=1;k<=N;++k)
            {
                if(NUM[i][j][k]==0){
                    if(check(i,d1[0])&&check(j,d1[1])&&check(k,d1[2])||
                       check(i,d2[0])&&check(j,d2[1])&&check(k,d2[2]))
                        count++;
                    NUM[i][j][k]=1;
                }
            }
    printf("%d\n",count);
    return 0;
}

Executing...
   Test 1: TEST OK [0.019 secs, 7400 KB]
   Test 2: TEST OK [0.008 secs, 7400 KB]
   Test 3: TEST OK [0.022 secs, 7400 KB]
   Test 4: TEST OK [0.008 secs, 7400 KB]
   Test 5: TEST OK [0.008 secs, 7400 KB]
   Test 6: TEST OK [0.019 secs, 7400 KB]
   Test 7: TEST OK [0.019 secs, 7400 KB]
   Test 8: TEST OK [0.024 secs, 7400 KB]
   Test 9: TEST OK [0.024 secs, 7400 KB]
   Test 10: TEST OK [0.011 secs, 7400 KB]

All tests OK.

Your program (‘combo‘) produced all correct answers! This is your submission #3 for this problem. Congratulations!

Here are the test data inputs:

------- test 1 [length 15 bytes] ----
50
1 2 3
5 6 7
------- test 2 [length 14 bytes] ----
1
1 1 1
1 1 1
------- test 3 [length 14 bytes] ----
4
1 2 3
2 3 4
------- test 4 [length 15 bytes] ----
10
9 9 9
3 3 3
------- test 5 [length 18 bytes] ----
50
49 50 1
50 1 2
------- test 6 [length 18 bytes] ----
95
5 6 7
70 80 90
------- test 7 [length 22 bytes] ----
100
100 100 100
1 1 1
------- test 8 [length 21 bytes] ----
100
1 50 100
2 51 99
------- test 9 [length 22 bytes] ----
100
1 100 99
1 100 98
------- test 10 [length 18 bytes] ----
100
100 1 2
4 5 6




USACO 1.3 Combination Lock (枚举)