Commit 7164ee51 authored by makoto.nishizawa's avatar makoto.nishizawa
Browse files

detail was copied

parent 3769b333
Loading
Loading
Loading
Loading

a.out

0 → 100644
+13.3 KiB

File added.

No diff preview for this file type.

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