Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 25823 | Accepted: 8816 |
Description
Input
Output
Sample Input
3 1 1 2 3 4 3
Sample Output
Scenario #1: A1 Scenario #2: impossible Scenario #3: A1B3C1A2B4C2A3B1C3A4B2C4
Source
#include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #include <cstring> #include <map> #include <string> #include <stack> #include <cctype> #include <vector> #include <queue> #include <set> using namespace std; //#define Online_Judge #define outstars cout << "***********************" << endl; #define clr(a,b) memset(a,b,sizeof(a)) #define lson l , mid , rt << 1 #define rson mid + 1 , r , rt << 1|1 #define FOR(i , x , n) for(int i = (x) ; i < (n) ; i++) #define FORR(i , x , n) for(int i = (x) ; i <= (n) ; i++) #define REP(i , x , n) for(int i = (x) ; i > (n) ; i--) #define REPP(i ,x , n) for(int i = (x) ; i >= (n) ; i--) #define mid ((l + r) >> 1) #define mk make_pair const int MAXN = 25; const int maxw = 10000000 + 20; const int MAXNNODE = 10000 +10; const long long LLMAX = 0x7fffffffffffffffLL; const long long LLMIN = 0x8000000000000000LL; const int INF = 0x7fffffff; const int IMIN = 0x80000000; #define eps 1e-8 #define mod 10007 typedef long long LL; const double PI = acos(-1.0); typedef double D; typedef pair<int , int> pii; int vis[MAXN][MAXN] , ok; int num , p , q; char path[MAXN *2]; int dx[8] = {-2 , -2 , -1 , -1 , 1 , 1 , 2 , 2}; int dy[8] = {-1 , 1 , -2 , 2 , -2 , 2 , -1 , 1}; void dfs(int depth , int x ,int y) { if(depth == num) { FOR(i , 0 , 2 * depth) { printf("%c" , path[i]); } printf("\n"); ok = 1; return ; } for(int i = 0 ; i < 8 && !ok ; i++) { int xx = x + dx[i]; int yy = y + dy[i]; if(xx > 0 && yy >0 && xx <= q&& yy <= p&&!vis[yy][xx]) { vis[yy][xx] = 1; path[2 * depth] = 'A' + xx - 1; path[2 * depth + 1] = '1' + yy - 1; dfs(depth + 1 , xx , yy); vis[yy][xx] = 0; } } } int main() { //ios::sync_with_stdio(false); #ifdef Online_Judge freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif // Online_Judge int n; cin >> n; FORR(i , 1 , n) { scanf("%d%d" , &p , &q); printf("Scenario #%d:\n" , i); clr(vis , 0); num = p * q; ok = 0; vis[1][1] = 1; path[0] = 'A' , path[1] = '1'; dfs(1 , 1 , 1); if(!ok)printf("impossible\n"); printf("\n"); } return 0; }