• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            我希望你是我獨家記憶

            一段永遠封存的記憶,隨風而去
            posts - 263, comments - 31, trackbacks - 0, articles - 3
               :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

            USACO512

            Posted on 2008-10-05 23:04 Hero 閱讀(129) 評論(0)  編輯 收藏 引用 所屬分類: 代碼如詩--ACM
              1 /*
              2 ID: wangzha4
              3 LANG: C++
              4 TASK: starry
              5 */
              6 /*
              7 Executing
              8    Test 1: TEST OK [0.000 secs, 3136 KB]
              9    Test 2: TEST OK [0.011 secs, 3140 KB]
             10    Test 3: TEST OK [0.022 secs, 3140 KB]
             11    Test 4: TEST OK [0.011 secs, 3140 KB]
             12    Test 5: TEST OK [0.000 secs, 3136 KB]
             13 */
             14 
             15 #include <stdio.h>
             16 #include <stdlib.h>
             17 #include <string.h>
             18 
             19 const int INF = 999999 ;
             20 const int size = 110 ;
             21 char data[size][size] ;
             22 int flag[size][size] ;
             23 int cflag ;
             24 
             25 char tcluster[size][size] ; int trow, tcol ;
             26 char A[size][size], B[size][size] ;
             27 char cluster[27][size][size] ;
             28 int lenwid[30][2] ;
             29 
             30 char flagtostr[3000] ; char str ;
             31 
             32 int len, wid ;
             33 int num ;
             34 
             35 int next[9][2] ;
             36 
             37 int row, col ;
             38 int snrow, enrow ;
             39 int sncol, encol ;
             40 
             41 int fmax( int a, int b ) 
             42 {
             43     return a > b ? a : b ;
             44 }
             45 int fmin( int a, int b ) 
             46 {
             47     return a < b ? a : b ;
             48 }
             49 
             50 void input()
             51 {
             52     memset( flag, 0sizeof(flag) ) ; cflag = 1 ; str = 'a' ;
             53     memset( lenwid, 0sizeof(lenwid) ) ; flagtostr[0= '0' ;
             54 
             55     forint i=0; i<row; i++ ) scanf( "%s", data[i] ) ;
             56 
             57     next[1][0= -1 ; next[1][1= -1 ;
             58     next[2][0= -1 ; next[2][1=  0 ;
             59     next[3][0= -1 ; next[3][1= +1 ;
             60 
             61     next[4][0=  0 ; next[4][1= -1 ;
             62     next[5][0=  0 ; next[5][1= +1 ;
             63 
             64     next[6][0= +1 ; next[6][1= -1 ;
             65     next[7][0= +1 ; next[7][1=  0 ;
             66     next[8][0= +1 ; next[8][1= +1 ;
             67 }
             68 
             69 bool inint r, int c )
             70 {
             71     if( r>=0&&r<row&&c>=0&&c<col ) return true ;
             72 
             73     return false ;
             74 }
             75 void DFS( int r, int c )
             76 {
             77     snrow = fmin( snrow, r ) ; sncol = fmin( sncol, c ) ;
             78     enrow = fmax( enrow, r ) ; encol = fmax( encol, c ) ;
             79     flag[r][c] = cflag ; data[r][c] = '0' ;
             80 
             81     forint i=1; i<=8; i++ )
             82     {
             83         int nextr = r+next[i][0] ; int nextc = c+next[i][1] ;
             84         ifin( nextr, nextc ) && 0==flag[nextr][nextc] && data[nextr][nextc]!='0' ) 
             85             DFS( nextr, nextc ) ;
             86     }
             87 }
             88 
             89 bool compare( char C[][size], int len, int wid, int i )
             90 {
             91     forint r=0; r<=len; r++ ) forint c=0; c<=wid; c++ )
             92     {
             93         if( cluster[i][r][c] != C[r][c] ) return false ;
             94     }
             95     return true ;
             96 }
             97 
             98 void turn90( char sour[size][size], char dest[size][size], int row, int col )
             99 {
            100     //memset( dest, 0, sizeof(dest) ) ;
            101     forint i=0; i<size; i++ ) forint j=0; j<size; j++ ) dest[i][j] = 0 ;
            102     forint r=0; r<=row; r++ ) forint c=0; c<=col; c++ )
            103         dest[c][row-r] = sour[r][c] ;
            104 }
            105 
            106 void turnupdn( char sour[size][size], int row, int col )
            107 {
            108     char dest[size][size] ;    memset( dest, 0sizeof(dest) ) ;
            109     forint r=0; r<=row; r++ ) forint c=0; c<=col; c++ )
            110         dest[row-r][c] = sour[r][c] ;
            111 
            112     //memcpy( sour, dest, sizeof(dest) ) ;
            113     forint r=0; r<size; r++ ) forint c=0; c<size; c++ )
            114         sour[r][c] = dest[r][c] ;
            115 }
            116 
            117 int find( int len, int wid )
            118 {
            119     forint i=0; i<=1; i++ )
            120     {
            121         if0 == i )
            122         {
            123             memset( A, 0sizeof(A) ) ;
            124             forint r=snrow; r<=enrow; r++ ) forint c=sncol; c<=encol; c++ )
            125             {
            126                 if( cflag == flag[r][c] ) A[r-snrow][c-sncol] = '1' ;
            127             }
            128         }
            129         else 
            130         {
            131             turn90( B, A, wid, len ) ;    turnupdn( A, len, wid ) ;
            132         }
            133         forint i=1; i<=num; i++ )
            134         {
            135             if( lenwid[i][0]!=len || lenwid[i][1]!=wid ) continue ;
            136             else
            137                 if( compare( A, len, wid, i ) ) return i ;
            138         }
            139         turn90( A, B, len, wid ) ;
            140         forint i=1; i<=num; i++ )
            141         {
            142             if( lenwid[i][0]!=wid || lenwid[i][1]!= len ) continue ;
            143             else 
            144                 if( compare( B, wid, len, i ) ) return i ;
            145         }
            146         turn90( B, A, wid, len ) ;
            147         forint i=1; i<=num; i++ )
            148         {
            149             if( lenwid[i][0]!=len || lenwid[i][1]!=wid ) continue ;
            150             else
            151                 if( compare( A, len, wid, i ) ) return i ;
            152         }
            153         turn90( A, B, len, wid ) ;
            154         forint i=1; i<=num; i++ )
            155         {
            156             if( lenwid[i][0]!=wid || lenwid[i][1]!= len ) continue ;
            157             else 
            158                 if( compare( B, wid, len, i ) ) return i ;
            159         }
            160     }
            161 
            162     return 0 ;
            163 }
            164 
            165 void process()
            166 {
            167     memset( cluster, 0sizeof(cluster) ) ; num = 0 ;
            168 
            169     forint r=0; r<row; r++ )
            170     {
            171         forint c=0; c<col; c++ )
            172         {
            173             if0==flag[r][c] && data[r][c]!='0' )
            174             {
            175                 snrow = r ; enrow = r ; sncol = INF ; encol = 0 ; DFS( r, c ) ;
            176 
            177                 len = enrow - snrow ; wid = encol - sncol ;
            178 
            179                 int findnum = find( len, wid ) ;
            180 
            181                 if( findnum != 0 ) 
            182                 {
            183                     flagtostr[cflag++= 'a'-1+findnum ;
            184                 }
            185                 else
            186                 {
            187                     num++ ; flagtostr[cflag] = str++ ;
            188                     forint r=snrow; r<=enrow; r++ ) forint c=sncol; c<=encol; c++ )
            189                     {
            190                         if( cflag == flag[r][c] ) cluster[num][r-snrow][c-sncol] = '1' ;
            191                     }
            192 
            193                     lenwid[num][0= len ; lenwid[num][1= wid ; cflag++ ;
            194                 }
            195             }
            196         }
            197     }
            198 }
            199 
            200 void output()
            201 {
            202     /*
            203     for( int i=0; i<row; i++ )
            204     {
            205     for( int j=0; j<col; j++ )
            206     {
            207     printf( "%-3d", flag[i][j] )    ;
            208     }
            209     printf( "\n" ) ;
            210     }
            211     printf( "**************************\n" ) ;
            212     */
            213     forint i=0; i<row; i++ )
            214     {
            215         forint j=0; j<col; j++ )
            216         {
            217             printf( "%c", flagtostr[flag[i][j]] )    ;
            218         }
            219         printf( "\n" ) ;
            220     }
            221 }
            222 
            223 int main()
            224 {
            225     //freopen( "in.txt", "r", stdin ) ;
            226     //freopen( "out.txt", "w", stdout ) ;
            227     freopen( "starry.in""r", stdin ) ;
            228     freopen( "starry.out""w", stdout ) ;
            229 
            230     while( scanf( "%d %d"&col, &row )!= EOF )
            231     {
            232         input() ;
            233 
            234         process() ;
            235 
            236         output() ;
            237     }    
            238 
            239     return 0 ;
            240 }
            亚洲精品无码久久毛片| 久久久精品一区二区三区| 亚洲午夜久久影院| 久久精品黄AA片一区二区三区| 久久精品这里只有精99品| 99久久无码一区人妻| 久久婷婷国产麻豆91天堂| 国产精品岛国久久久久| 99久久777色| 久久久久一区二区三区| 99久久精品免费观看国产| 亚洲国产精品一区二区久久| 91精品观看91久久久久久 | 久久97精品久久久久久久不卡| 亚洲人成网亚洲欧洲无码久久| 久久精品国产久精国产果冻传媒 | 美女久久久久久| 久久人人爽人人爽AV片| 色婷婷狠狠久久综合五月| 久久天天躁夜夜躁狠狠| 久久亚洲私人国产精品| av午夜福利一片免费看久久| 狠狠狠色丁香婷婷综合久久五月| 中文字幕亚洲综合久久2| 日韩影院久久| 久久久无码精品亚洲日韩蜜臀浪潮| 久久精品国产亚洲AV大全| 精品久久久久久无码中文野结衣| 亚洲国产成人精品女人久久久 | 精品久久久无码人妻中文字幕豆芽| 久久人人爽人人爽人人片av麻烦| 一本色道久久综合狠狠躁篇| 一本久久知道综合久久| 伊人久久综合热线大杳蕉下载| 日本加勒比久久精品| 欧美丰满熟妇BBB久久久| 成人午夜精品久久久久久久小说| 欧美性猛交xxxx免费看久久久| 无码人妻精品一区二区三区久久| 精品精品国产自在久久高清| 久久人人爽人人爽人人片AV麻豆|