usaco Combination Lock

用枚举的方法直接计算出所有的可能性,未标记加一,然后标记

/*
ID: modengd1
PROG: combo
LANG: C++
*/
#include <iostream>
#include <stdio.h>
#include <memory.h>

using namespace std;
bool vis[101][101][101];
int main()
{
    int a,b,c,N;
    int e,f,g;
    freopen("combo.in","r",stdin);
    freopen("combo.out","w",stdout);
    memset(vis,false,sizeof(vis));
    int ans=0;
    scanf("%d",&N);
    scanf("%d%d%d",&a,&b,&c);
    scanf("%d%d%d",&e,&f,&g);
    for(int i=-2;i<3;i++)
    {
        for(int j=-2;j<3;j++)
        {
            for(int k=-2;k<3;k++)
            {
                int q,w,r;
                q=(a+i+N)%N;
                if(q==0)
                {
                    q=N;
                }
                w=(b+j+N)%N;
                if(w==0)
                {
                    w=N;
                }
                r=(c+k+N)%N;
                if(r==0)
                {
                    r=N;
                }
                if(!vis[q][w][r])
                {
                    ans++;
                    vis[q][w][r]=true;
                }
                //再来一遍
                q=(e+i+N)%N;
                if(q==0)
                {
                    q=N;
                }
                w=(f+j+N)%N;
                if(w==0)
                {
                    w=N;
                }
                r=(g+k+N)%N;
                if(r==0)
                {
                    r=N;
                }
                if(!vis[q][w][r])
                {
                    ans++;
                    vis[q][w][r]=true;
                }
            }
        }
    }
    cout <<ans<< endl;
    return 0;
}

  

posted on 2015-08-27 15:20  insaneman  阅读(162)  评论(0)    收藏  举报

导航