含有章节索引的中文 文章模板
ACM训练题汇集
简述
第七题
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4
5 #define TPS 4
6
7 #define STEP \
8 do { \
9 tt =1; \
10 for(; d<TPS; d++) \
11 { \
12 tr=r+tp[d][0], tc=c+tp[d][1]; \
13 if (tr>=0 && tr <n && tc>=0 && tc <m && p[tr][tc]=='.') \
14 { r = tr, c = tc; \
15 p[r][c] = '0'+d; \
16 st[t] = d; \
17 t++, s++; \
18 tt = 0; \
19 break; \
20 } \
21 } \
22 } while(0)
23
24
25 #define OMAX 25
26
27 void printp(int n, int m, char **p)
28 {
29 int i, j;
30 fprintf(stdout, "\n");
31 for(i=0; i<n; i++)
32 {
33 for(j=0; j<m; j++)
34 fprintf(stdout, "%c", p[i][j]);
35 fprintf(stdout, "\n");
36 }
37 }
38
39 int count(int n, int m, char **p)
40 {
41 int st[OMAX*OMAX];
42 int s, d;
43 int tt;
44 signed int t;
45 signed int r, c, tr, tc;
46 int tp[TPS][2] = { {+1, 0}, {-1, 0}, {0, +1}, {0, -1} };
47 //printp(n,m,p);
48 for(r=0; r<n; r++)
49 {
50 for(c=0; c<m; c++)
51 if(p[r][c]=='@')
52 break;
53 if(p[r][c]=='@')
54 break;
55 }
56 for(s=1, st[0]=TPS, t=1; t>0;)
57 {
58 d=0;
59 STEP;
60 //fprintf(stderr, "(%d, %d)\t", r, c);
61 //printp(n,m,p);
62
63 while (t>0 && tt == 1)
64 {
65 t--;
66 d = st[t];
67 r -= tp[d][0];
68 c -= tp[d][1];
69 d++;
70 STEP;
71 //fprintf(stderr, "(%d, %d)\t", r, c);
72 }
73 }
74 return s;
75 }
76
77 int pp(char **p)
78 {
79 int n, m;
80 int i;
81 fscanf(stdin, "%d%d", &m, &n);
82 for(i=0; i<n ;i++)
83 fscanf(stdin,"%s", p[i]);
84
85 if(n==0 || m==0)
86 return 0;
87 else
88 return count(n, m, p);
89 }
90
91 int main()
92 {
93 int i;
94 char **p;
95 p = (char **)malloc(sizeof(char*)*OMAX);
96 for(i=0; i< OMAX; i++)
97 p[i]=(char *)malloc(sizeof(char)*OMAX);
98 do
99 {
100 i=pp(p);
101 if(i!=0)
102 fprintf(stdout, "%d\n", i);
103 }
104 while(i!=0);
105
106 return 0;
107 }
某题
1 #include<stdio.h>
2 #include<string.h>
3 typedef struct
4 { char ch[50];
5 int len;
6 }SqString;
7 int creat_string(SqString s1,SqString s2,SqString s);
8 int check(int a[50][50]);
9
10
11 void main()
12 { int i=0;
13 SqString s,s1,s2;
14 scanf("%s",&s1.ch);
15 s1.len=strlen(s1.ch);
16 scanf("%s",&s2.ch);
17 s2.len=strlen(s2.ch);
18 for(i=0;i<10;i++){
19
20 s.ch[i]='*';
21 s.len++;
22 }
23 creat_string(s1,s2,s);
24 return ;
25 }
26 int creat_string(SqString s1,SqString s2,SqString &s)
27 { int i,j,k,m,n,t=0;
28 int a[50][50];
29 int b[50][50];
30 for(i=0;i<50;i++)
31 for(j=0;j<50;j++)
32 a[i][j]=b[i][j]=0;
33 for(i=0;i<s1.len;i++)
34 for(j=0;j<s2.len;j++)
35 if(s1.ch[i]==s2.ch[j])
36 a[i][j]=1;
37 k=1;
38 while(check(a))
39 {
40 for(i=0;i<s1.len;i++)
41 for(j=0;j<s2.len;j++)
42 {
43 b[i][j]=a[i][j];
44 }
45 for(m=0;m<s1.len;m++)
46 { while(i<s1.len&&j<s2.len)
47 { if(a[i][j]==1&&a[i+k][j+k]==0)
48 { a[i][j]=0;
49 i=i+k+1;
50 j=j+k+1;
51 }
52 else
53 {i++;
54 j++;
55 }
56 }
57 }
58 for(n=0;n<s2.len;n++)
59 { while(i<s1.len&&j<s2.len)
60 { if(a[i][j]==1&&a[i+k][j+k]==0)
61 { a[i][j]=0;
62 i=i+k+1;
63 j=j+k+1;
64 }
65 else
66 {i++;
67 j++;
68 }
69 }
70 }
71 k++;
72 }
73 while(i<s1.len&&j<s2.len)
74 if(b[i][j]==1)
75 for(;t<k;t++)
76 { s.ch[t]=s1.ch[i];
77 i++;
78 }
79 printf("%s",s.ch);
80 return 1;
81 }
82 int check(int a[50][50])
83 { int i,j;
84 for(i=0;i<50;i++)
85 for(j=0;j<50;j++)
86 if(a[i][j]!=0)
87 return 1;
88 return 0;
89 }
90
91 ...