含有章节索引的中文 文章模板

1. ACM训练题汇集

简述

1.0.1. 第七题

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

1.0.1.1. 某题

   1 
   2 #include<stdio.h>
   3 #include<string.h>
   4 typedef struct 
   5 {  char ch[50];
   6    int len;
   7 }SqString;
   8 int creat_string(SqString s1,SqString s2,SqString s);
   9 int check(int a[50][50]);
  10 
  11 
  12 void main()
  13 {  int i=0;
  14    SqString s,s1,s2;
  15    scanf("%s",&s1.ch);
  16    s1.len=strlen(s1.ch); 
  17    scanf("%s",&s2.ch);
  18    s2.len=strlen(s2.ch);
  19    for(i=0;i<10;i++){
  20 
  21    s.ch[i]='*';
  22         s.len++;
  23    }
  24    creat_string(s1,s2,s);
  25    return ;
  26 }
  27 int creat_string(SqString s1,SqString s2,SqString &s)
  28 {  int i,j,k,m,n,t=0;
  29    int a[50][50];
  30    int b[50][50];
  31    for(i=0;i<50;i++)
  32            for(j=0;j<50;j++)
  33            a[i][j]=b[i][j]=0;
  34    for(i=0;i<s1.len;i++)
  35            for(j=0;j<s2.len;j++)
  36                    if(s1.ch[i]==s2.ch[j])
  37                            a[i][j]=1;
  38    k=1;
  39    while(check(a))
  40    {
  41           for(i=0;i<s1.len;i++)
  42         for(j=0;j<s2.len;j++)
  43                 {
  44                b[i][j]=a[i][j];
  45                 }
  46           for(m=0;m<s1.len;m++)
  47           {   while(i<s1.len&&j<s2.len)
  48           {     if(a[i][j]==1&&a[i+k][j+k]==0)
  49           {         a[i][j]=0;
  50                     i=i+k+1;
  51                                 j=j+k+1;
  52           }
  53                 else
  54                         {i++;
  55                          j++;
  56                         }
  57           }
  58           }
  59           for(n=0;n<s2.len;n++)
  60           {   while(i<s1.len&&j<s2.len)
  61           {     if(a[i][j]==1&&a[i+k][j+k]==0)
  62           {         a[i][j]=0;
  63                     i=i+k+1;
  64                                 j=j+k+1;
  65           }
  66                 else
  67                         {i++;
  68                          j++;
  69                         }
  70           }
  71           }
  72           k++;
  73         }
  74         while(i<s1.len&&j<s2.len)
  75                         if(b[i][j]==1)
  76                                 for(;t<k;t++)
  77                                 { s.ch[t]=s1.ch[i];
  78                                   i++;
  79                                 }
  80         printf("%s",s.ch);
  81         return 1;
  82 }
  83 int check(int a[50][50])
  84 { int i,j;
  85   for(i=0;i<50;i++)
  86         for(j=0;j<50;j++)
  87                         if(a[i][j]!=0)
  88                                 return 1;
  89   return 0;
  90 }
  91 
  92 ...