久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

USACO/transform

 liluvu 2013-06-10

Translate:USACO/transform

Transformations 方塊轉(zhuǎn)換

目錄

 [隱藏

[編輯]描述

一塊N x N(1<=N<=10)正方形的黑白瓦片的圖案要被轉(zhuǎn)換成新的正方形圖案,。寫一個程序來找出將原始圖案按照以下列轉(zhuǎn)換方法轉(zhuǎn)換成新圖案的最小方式:

1:轉(zhuǎn)90度:圖案按順時針轉(zhuǎn)90度,。

2:轉(zhuǎn)180度:圖案按順時針轉(zhuǎn)180度,。

3:轉(zhuǎn)270度:圖案按順時針轉(zhuǎn)270度,。

4:反射:圖案在水平方向翻轉(zhuǎn)(以中央鉛垂線為中心形成原圖案的鏡像)。

5:組合:圖案在水平方向翻轉(zhuǎn),,然后再按照1到3之間的一種再次轉(zhuǎn)換,。

6:不改變:原圖案不改變。

7:無效轉(zhuǎn)換:無法用以上方法得到新圖案,。

如果有多種可用的轉(zhuǎn)換方法,請選擇序號最小的那個,。

只使用1--7中的一個步驟來完成這次轉(zhuǎn)換,。

[編輯]格式

PROGRAM NAME: transform

INPUT FORMAT:

file (transform.in)

第一行: 單獨(dú)的一個整數(shù)N。

第二行到第N+1行: N行每行N個字符(不是“@”就是“-”),;這是轉(zhuǎn)換前的正方形,。

第N+2行到第2*N+1行: N行每行N個字符(不是“@”就是“-”);這是轉(zhuǎn)換后的正方形,。

OUTPUT FORMAT:

file (transform.out)

單獨(dú)的一行包括1到7之間的一個數(shù)字(在上文已描述)表明需要將轉(zhuǎn)換前的正方形變?yōu)檗D(zhuǎn)換后的正方形的轉(zhuǎn)換方法,。

[編輯]SAMPLE INPUT

3
@-@
---
@@-
@-@
@--
--@

[編輯]SAMPLE OUTPUT

1
/*
ID: liluvu1
LANG: C++
TASK: transform
*/


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 10

char before[N][N];
char after[N][N];

typedef struct {
	int type;
	void (*handle)(char a[N][N], int n);
} trans_s;

enum {
	ROT90=1,
	ROT180,
	ROT270,
	MIRROR,
	COMP,
	NOTCHANGE,
	NOWAY,
};


bool isEuqal(char a[N][N], char b[N][N], int n){
	for (int i = 0; i < n; i++){
		for (int j = 0; j < n; j++){
			if (a[i][j] != b[i][j])
				return 0;
		}
	}
	return 1;
}

void arrCopy(char a[N][N], char b[N][N], int n){
	for (int i = 0; i < n; i++){
		for (int j = 0; j < n; j++){
			a[i][j] = b[i][j];
		}
	}
}

void rot90(char a[N][N], int n){
	char temp[N][N];
	arrCopy(temp, a, n);

	for (int i = 0; i < n; i++){
		for (int j = 0; j < n; j++){
			temp[i][j] = a[n-1-j][i];
		}
	}
	arrCopy(a, temp, n);
}

void rot180(char a[N][N], int n){
	char temp[N][N];
	arrCopy(temp, a, n);

	for (int i = 0; i < n; i++){
		for (int j = 0; j < n; j++){
			temp[i][j] = a[n-1-i][n-1-j];
		}
	}
	arrCopy(a, temp, n);
}

void rot270(char a[N][N], int n){
	char temp[N][N];
	arrCopy(temp, a, n);

	for (int i = 0; i < n; i++){
		for (int j = 0; j < n; j++){
			temp[i][j] = a[j][n-1-i];
		}
	}
	arrCopy(a, temp, n);
}

void mirror(char a[N][N], int n){
	char temp[N][N];
	arrCopy(temp, a, n);

	for (int i = 0; i < n; i++){
		for (int j = 0; j < n; j++){
			temp[i][j] = a[i][n-1-j];
		}
	}
	arrCopy(a, temp, n);
}

void comp(char a[N][N], int n){
	mirror(a, n);
}


trans_s list[] = {
	{ROT90, rot90},
	{ROT180, rot180},
	{ROT270, rot270},
	{MIRROR, mirror},
	{COMP, comp},
	{NOTCHANGE, NULL},
	{NOWAY, NULL},
};


int main(){
	FILE *fin = NULL;
	FILE *fout = NULL;

	fin = fopen("transform.in", "r");
	fout = fopen("transform.out", "w");

	int n = 0;
	fscanf(fin, "%d\n", &n);

	for (int i = 0; i < n; i++){
		fgets(before[i], N, fin); 			
	}

	for (int i = 0; i < n; i++){
		fgets(after[i], N, fin); 			
	}
	
	int fnum = sizeof(list)/sizeof(list[0]);

	char temp[N][N];
	char temp2[N][N];
	int ret = NOWAY;
	for (int i = 0; i < fnum; i++){
		arrCopy(temp, before, n);
		if (list[i].handle) list[i].handle(temp, n);
		if (list[i].type == COMP) {
			for (int j = 0; j < ROT270; j++) {
				arrCopy(temp2, temp, n);
				if (list[j].handle) list[j].handle(temp2, n);
				if (isEuqal(temp2, after, n)){
					ret = COMP;
					break;
				}
			}
		} else {		
			if (isEuqal(temp, after, n)){
				ret = list[i].type;
				break;
			}
		}
	}

	fprintf(fout, "%d\n", ret);
}

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多