1
***********1934********************************
2
-----------------------------------------------
3
#include<iostream>
4
#define Max 30
5
using namespace std;
6
int M[Max][Max];
7
int R,C;
8
char code[1000];
9
struct node{
10
int x,y;
11
void operator=(node a)
12
{x=a.x;y=a.y;}
13
};node start;
14
node direct[4];
15
void init()
16
{
17
direct[0].x=0;direct[0].y=1;//right
18
direct[1].x=1;direct[1].y=0;//down
19
direct[2].x=0;direct[2].y=-1;//left
20
direct[3].x=-1;direct[3].y=0;//up
21
}
22
int setl(char c,int d)//d表示方向
23
{
24
int t,b[5],i=0,j;
25
int p,q;//放置的位置
26
memset(b,0,sizeof(b));
27
if(c!=' '){
28
t=c-'A'+1;
29
while(t>0){
30
b[i++]=t%2;
31
t/=2;}
32
}
33
for(i=d,j=4;j>=0;){
34
p=direct[i].x+start.x;
35
q=direct[i].y+start.y;
36
if(p<0||p>=R){i=(i+1)%4;continue;}
37
if(q<0||q>=C){i=(i+1)%4;continue;}
38
if(M[p][q]!=-1){i=(i+1)%4;continue;}
39
M[p][q]=b[j--];
40
start.x=p;
41
start.y=q;
42
}
43
return i;
44
}
45
void solve()
46
{
47
int i,j,d=0;
48
for(i=0;code[i]!='\0';i++)
49
d=setl(code[i],d);
50
for(i=0;i<R;i++)
51
for(j=0;j<C;j++){
52
if(M[i][j]==-1)M[i][j]=0;
53
printf("%d",M[i][j]);}
54
printf("\n");
55
}
56
int main()
57
{
58
/*freopen("1.ans","w",stdout);*/
59
int N,i,j;
60
char c;
61
init();
62
scanf("%d",&N);
63
for(i=1;i<=N;i++){
64
memset(M,-1,sizeof(M));
65
memset(code,0,sizeof(code));
66
start.x=0;start.y=-1;
67
scanf("%d %d",&R,&C);
68
getchar();
69
for(j=0;(c=getchar())!='\n';j++)
70
code[j]=c;
71
printf("%d ",i);
72
solve();}
73
return 0;
74
}
1
******************************1935************************************************************
2
#include<iostream>
3
#define Max 21
4
using namespace std;
5
int M[Max][Max];
6
int R,C,d=0;//d表示方向
7
char code[90];
8
struct node{
9
int x,y;
10
void operator=(node a){
11
x=a.x;
12
y=a.y;}
13
};
14
node start;
15
node direct[4];
16
void init()
17
{
18
direct[0].x=0;direct[0].y=1;//right
19
direct[1].x=1;direct[1].y=0;//down
20
direct[2].x=0;direct[2].y=-1;//left
21
direct[3].x=-1;direct[3].y=0;//up
22
}
23
int get()
24
{
25
int p,q,n=0;
26
int result=0;
27
for(;n<5;){
28
p=start.x+direct[d].x;
29
q=start.y+direct[d].y;
30
if(p<0||p>=R){d=(d+1)%4;continue;}
31
if(q<0||q>=C){d=(d+1)%4;continue;}
32
if(M[p][q]==-1){d=(d+1)%4;continue;}
33
n++;
34
start.x=p;
35
start.y=q;
36
result*=2;
37
result+=M[p][q];
38
M[p][q]=-1;}
39
return result;
40
}
41
void solve(int h)
42
{
43
int t,i,j=-1;
44
for(i=0;i<h;i++){
45
t=get();
46
if(t==0)code[i]=' ';
47
else {
48
code[i]='A'+t-1;
49
j=i;}
50
}
51
for(i=0;i<=j;i++)
52
putchar(code[i]);
53
54
}
55
int main()
56
{
57
/*freopen("1935#1.in","r",stdin);
58
freopen("1935#3.out","w",stdout);*/
59
int N,i,j,k,tmp;
60
char c;
61
scanf("%d",&N);
62
getchar();
63
init();
64
for(i=1;i<=N;i++){
65
start.x=0;
66
start.y=-1;
67
scanf("%d %d",&R,&C);
68
tmp=(R*C)/5;
69
memset(M,0,sizeof(M));
70
getchar();
71
for(j=0;j<R;j++)
72
for(k=0;k<C;k++){
73
c=getchar();
74
M[j][k]=c-'0';
75
}
76
getchar();
77
printf("%d ",i);
78
solve(tmp);
79
putchar('\n');
80
}
81
return 0;
82
}
posted on 2008-03-09 14:05
zoyi 阅读(231)
评论(1) 编辑 收藏 引用 所属分类:
acm