题目链接: POJ 3050
题目大意:5*5的方格从里面能取出多少个不同的连续的6位数字组合。
一开始居然打算用hash。。。发现要hash[10^7],最后用的set,还是stl大法好。
/***********************************
Problem: 3050 User: ChenyangDu
Memory: 1024K Time: 94MS
Language: G++ Result: Accepted
************************************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
using namespace std;
const int map[2][4] = {1,0,0,-1,0,1,-1,0};
int in[5][5],mod[6];
set <int> se;
void input(){
for(int i=0;i<5;i++){
for(int j=0;j<5;j++)
scanf("%d",&in[i][j]);
}
}
void outcome(){
int r = 0;
for(int i=0;i<6;i++){
r *= 10;
r += mod[i];
}
se.insert(r);
return;
}
void dfs(int x,int y,int s){
if(s == 6){
outcome();
return ;
}
mod[s] = in[x][y];
for(int i=0;i<4;i++){
int a = map[0][i] + x;
int b = map[1][i] + y;
if(a>=0 && a<5 && b>=0 && b<5){
dfs(a,b,s+1);
}
}
}
int main(){
//freopen("in.txt","r",stdin);
input();
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
dfs(i,j,0);
}
}
cout<<se.size();
return 0;
}