Loading a.out 0 → 100644 +13.3 KiB File added.No diff preview for this file type. View file info.txt 0 → 100644 +8 −0 Changes for info.txt: 8 added lines, 0 removed lines. Original line number Diff line number Diff line // block_data[0][X][X]は使用しない // block_data[block#][0][0] ブロックの左上のマスのx座標 (0スタート,未配置なら-1) // block_data[block#][0][1] ブロックの左上のマスのy座標 (0スタート,未配置なら-1) // block_data[block#][0][2] 未使用 // block_data[block#][1~4][X] ブロックを構成するマスの情報 // block_data[block#][1~4][0] マスの,左上マスからの相対位置 x方向 // block_data[block#][1~4][1] マスの,左上マスからの相対位置 y方向 // block_data[block#][1~4][2] マスの端点情報 (数字がなければ0,モノミノで存在しない場合は-1) No newline at end of file io.c 0 → 100644 +121 −0 Changes for io.c: 121 added lines, 0 removed lines. Original line number Diff line number Diff line /* io.c */ /* Last Change: 2019/06/02 (Sun) 23:53:02. */ #include<stdio.h> #include"io.h" short int W=MAXW, H=MAXH; // (問題で設定された) 盤面サイズ上限 short int w=0, h=0; // 使用する盤面サイズ short int blocks=0; // ブロックの数 short int block_data[MAXBLOCK+1][5][3]; // ブロックの情報 short int board_data[MAXW][MAXH]; // 盤面情報 void reset_parameters(void){ int i,j,k; for(i=0;i<MAXBLOCK;i++) for(j=0;j<5;j++) for(k=0;k<3;k++) block_data[i][j][k]=-1; for(i=0;i<MAXW;i++) for(j=0;j<MAXH;j++) board_data[i][j]=0; return; } void read_problem(void){ reset_parameters(); int x,y; //size of block int i,j,k; int nowx=0,nowblock=1,num=0; //used for block reading char c,str[32]; // must be 20 or more scanf(" %s",str); //SIZE scanf(" %hd",&W); if(W>MAXW||W<=0) printf("Error: width\n"); scanf(" %c",&c); //X scanf(" %hd",&H); if(H>MAXH||H<=0) printf("Error: height\n"); scanf(" %s",str); //BLOCK_NUM scanf(" %hd",&blocks); if(blocks<0) printf("Error: blocks\n"); for(i=1;i<=blocks;i++){ scanf(" %s",str); //BLOCK#X scanf(" %d",&x); if(x>4||x<0) printf("Error: x\n"); scanf(" %c",&c); //X scanf(" %d",&y); if(y>4||y<0) printf("Error: y\n"); nowblock=1; gets(str); for(j=0;j<y;j++){ //=nowy nowx=num=0; gets(str); for(k=0;;k++){ if(str[k]=='*') num=-1; else if('0'<=str[k]&&str[k]<='9') num=num*10+str[k]-'0'; else if(str[k]==','){ if(num<0){ num=0; nowx++; continue; } block_data[i][nowblock][0]=nowx; block_data[i][nowblock][1]=j; block_data[i][nowblock][2]=num; nowx++; num=0; nowblock++; }else if(str[k]=='\0'){ if(num<0){ num=0; break; } block_data[i][nowblock][0]=nowx; block_data[i][nowblock][1]=j; block_data[i][nowblock][2]=num; num=0; nowblock++; break; } } if(nowx!=x-1) printf("Error: block\n"); } } return; } void print_answer(void){ printf("\n --ANSWER-- \n"); //comment out this row int i,j; h=H; w=W; printf("SIZE %dX%d\n",w,h); for(i=0;i<h;i++){ for(j=0;j<w;j++){ if(board_data[j][i]!=-1){ printf("%d",board_data[j][i]); }else{ printf("*"); } if(j==h-1) printf("\n"); else printf(","); } } for(i=1;i<=blocks;i++){ printf("BLOCK#%d @(%d,%d)\n",i,block_data[i][0][0],block_data[i][0][1]); } return; } io.h 0 → 100644 +38 −0 Changes for io.h: 38 added lines, 0 removed lines. Original line number Diff line number Diff line /* io.h */ /* Last Change: 2019/05/21 (Tue) 14:56:05. */ #ifndef _IO_H_ #define _IO_H_ #define MAXBLOCK 5184 // 72*72 #define MAXLINE 2592 // 72*72/2 #define MAXW 72 #define MAXH 72 extern short int W, H; // (問題で設定された) 盤面サイズ上限 extern short int w, h; // 使用する盤面サイズ extern short int blocks; // ブロックの数 extern short int block_data[MAXBLOCK+1][5][3]; // ブロックの情報 // block_data[0][X][X]は使用しない // block_data[block#][0][0] ブロックの左上のマスのx座標 (0スタート,未配置なら-1) // block_data[block#][0][1] ブロックの左上のマスのy座標 (0スタート,未配置なら-1) // block_data[block#][0][2] 未使用 // block_data[block#][1~4][X] ブロックを構成するマスの情報 // block_data[block#][1~4][0] マスの,左上マスからの相対位置 x方向 // block_data[block#][1~4][1] マスの,左上マスからの相対位置 y方向 // block_data[block#][1~4][2] マスの端点情報 (数字がなければ0,モノミノで存在しない場合は-1) extern short int board_data[MAXW][MAXH]; // 盤面情報 // board_data[x][y] が (x,y) の盤面情報を表わす // (0,0),(1,0),(2,0), ... ,(71,0) // ... // (0,71),(1,71), ... ,(71,71) // 基本的には回答フォーマットに沿う形 void reset_parameters(void); // read_problem に内包 void read_problem(void); void print_answer(void); #endif // _IO_H_ main.c 0 → 100644 +14 −0 Changes for main.c: 14 added lines, 0 removed lines. Original line number Diff line number Diff line /* main.c */ /* Last Change: 2019/05/21 (Tue) 14:44:03. */ #include"io.h" #include"solver.h" int main(void){ read_problem(); solver(); print_answer(); return 0; } Loading
info.txt 0 → 100644 +8 −0 Changes for info.txt: 8 added lines, 0 removed lines. Original line number Diff line number Diff line // block_data[0][X][X]は使用しない // block_data[block#][0][0] ブロックの左上のマスのx座標 (0スタート,未配置なら-1) // block_data[block#][0][1] ブロックの左上のマスのy座標 (0スタート,未配置なら-1) // block_data[block#][0][2] 未使用 // block_data[block#][1~4][X] ブロックを構成するマスの情報 // block_data[block#][1~4][0] マスの,左上マスからの相対位置 x方向 // block_data[block#][1~4][1] マスの,左上マスからの相対位置 y方向 // block_data[block#][1~4][2] マスの端点情報 (数字がなければ0,モノミノで存在しない場合は-1) No newline at end of file
io.c 0 → 100644 +121 −0 Changes for io.c: 121 added lines, 0 removed lines. Original line number Diff line number Diff line /* io.c */ /* Last Change: 2019/06/02 (Sun) 23:53:02. */ #include<stdio.h> #include"io.h" short int W=MAXW, H=MAXH; // (問題で設定された) 盤面サイズ上限 short int w=0, h=0; // 使用する盤面サイズ short int blocks=0; // ブロックの数 short int block_data[MAXBLOCK+1][5][3]; // ブロックの情報 short int board_data[MAXW][MAXH]; // 盤面情報 void reset_parameters(void){ int i,j,k; for(i=0;i<MAXBLOCK;i++) for(j=0;j<5;j++) for(k=0;k<3;k++) block_data[i][j][k]=-1; for(i=0;i<MAXW;i++) for(j=0;j<MAXH;j++) board_data[i][j]=0; return; } void read_problem(void){ reset_parameters(); int x,y; //size of block int i,j,k; int nowx=0,nowblock=1,num=0; //used for block reading char c,str[32]; // must be 20 or more scanf(" %s",str); //SIZE scanf(" %hd",&W); if(W>MAXW||W<=0) printf("Error: width\n"); scanf(" %c",&c); //X scanf(" %hd",&H); if(H>MAXH||H<=0) printf("Error: height\n"); scanf(" %s",str); //BLOCK_NUM scanf(" %hd",&blocks); if(blocks<0) printf("Error: blocks\n"); for(i=1;i<=blocks;i++){ scanf(" %s",str); //BLOCK#X scanf(" %d",&x); if(x>4||x<0) printf("Error: x\n"); scanf(" %c",&c); //X scanf(" %d",&y); if(y>4||y<0) printf("Error: y\n"); nowblock=1; gets(str); for(j=0;j<y;j++){ //=nowy nowx=num=0; gets(str); for(k=0;;k++){ if(str[k]=='*') num=-1; else if('0'<=str[k]&&str[k]<='9') num=num*10+str[k]-'0'; else if(str[k]==','){ if(num<0){ num=0; nowx++; continue; } block_data[i][nowblock][0]=nowx; block_data[i][nowblock][1]=j; block_data[i][nowblock][2]=num; nowx++; num=0; nowblock++; }else if(str[k]=='\0'){ if(num<0){ num=0; break; } block_data[i][nowblock][0]=nowx; block_data[i][nowblock][1]=j; block_data[i][nowblock][2]=num; num=0; nowblock++; break; } } if(nowx!=x-1) printf("Error: block\n"); } } return; } void print_answer(void){ printf("\n --ANSWER-- \n"); //comment out this row int i,j; h=H; w=W; printf("SIZE %dX%d\n",w,h); for(i=0;i<h;i++){ for(j=0;j<w;j++){ if(board_data[j][i]!=-1){ printf("%d",board_data[j][i]); }else{ printf("*"); } if(j==h-1) printf("\n"); else printf(","); } } for(i=1;i<=blocks;i++){ printf("BLOCK#%d @(%d,%d)\n",i,block_data[i][0][0],block_data[i][0][1]); } return; }
io.h 0 → 100644 +38 −0 Changes for io.h: 38 added lines, 0 removed lines. Original line number Diff line number Diff line /* io.h */ /* Last Change: 2019/05/21 (Tue) 14:56:05. */ #ifndef _IO_H_ #define _IO_H_ #define MAXBLOCK 5184 // 72*72 #define MAXLINE 2592 // 72*72/2 #define MAXW 72 #define MAXH 72 extern short int W, H; // (問題で設定された) 盤面サイズ上限 extern short int w, h; // 使用する盤面サイズ extern short int blocks; // ブロックの数 extern short int block_data[MAXBLOCK+1][5][3]; // ブロックの情報 // block_data[0][X][X]は使用しない // block_data[block#][0][0] ブロックの左上のマスのx座標 (0スタート,未配置なら-1) // block_data[block#][0][1] ブロックの左上のマスのy座標 (0スタート,未配置なら-1) // block_data[block#][0][2] 未使用 // block_data[block#][1~4][X] ブロックを構成するマスの情報 // block_data[block#][1~4][0] マスの,左上マスからの相対位置 x方向 // block_data[block#][1~4][1] マスの,左上マスからの相対位置 y方向 // block_data[block#][1~4][2] マスの端点情報 (数字がなければ0,モノミノで存在しない場合は-1) extern short int board_data[MAXW][MAXH]; // 盤面情報 // board_data[x][y] が (x,y) の盤面情報を表わす // (0,0),(1,0),(2,0), ... ,(71,0) // ... // (0,71),(1,71), ... ,(71,71) // 基本的には回答フォーマットに沿う形 void reset_parameters(void); // read_problem に内包 void read_problem(void); void print_answer(void); #endif // _IO_H_
main.c 0 → 100644 +14 −0 Changes for main.c: 14 added lines, 0 removed lines. Original line number Diff line number Diff line /* main.c */ /* Last Change: 2019/05/21 (Tue) 14:44:03. */ #include"io.h" #include"solver.h" int main(void){ read_problem(); solver(); print_answer(); return 0; }