USACO 1.2 Transformations (transform)

/*
ID: haolink1
PROG: transform
LANG: C++
*/
//#include<iostream>
#include <fstream>
using namespace std;
typedef unsigned int u_int;

bool Is90(char** first_pattern,char** second_pattern,u_int row_num){
    for(u_int i = 0; i < row_num; i++){
        for(u_int j = 0; j < row_num; j++){
            if(first_pattern[i][j] != second_pattern[j][row_num-1-i])
                return false;
        }
    }
    return true;
}

bool Is180(char** first_pattern, char** second_pattern, u_int row_num){ 
    for(u_int i = 0; i < row_num; i++){
        for(u_int j = 0; j < row_num; j++){
            if(first_pattern[i][j] != second_pattern[row_num-1-i][row_num-1-j])
                return false;
        }
    }
    return true;
}

bool Is270(char** first_pattern, char** second_pattern, u_int row_num){ 
    for(u_int i = 0; i < row_num; i++){
        for(u_int j = 0; j < row_num; j++){
            if(first_pattern[i][j] != second_pattern[row_num-1-j][i])
                return false;
        }
    }
    return true;
}

bool Reflection(char** first_pattern, char** second_pattern, u_int row_num){
    for(u_int i = 0; i < row_num; i++){
        for(u_int j = 0; j < row_num; j++){
            if(first_pattern[i][j] != second_pattern[i][row_num-1-j])
                return false;
        }
    }
    return true; 
}

void Reflect(char** source_pattern, char** target_pattern, u_int row_num){
    for(u_int i = 0; i < row_num; i++){
        for(u_int j = 0; j < row_num; j++){
            target_pattern[i][row_num-1-j] = source_pattern[i][j];
        }
    } 
}

bool NoChange(char** first_pattern, char** second_pattern, u_int row_num){
    for(u_int i = 0; i < row_num; i++){
        for(u_int j = 0; j < row_num; j++){
            if(first_pattern[i][j] != second_pattern[i][j])
                return false;
        }
    }
    return true;  
}

int main(){
    ifstream fin ("transform.in");
    u_int row_num = 0;
    fin>>row_num;
    char** first_pattern = new char*[row_num]; 
    for(u_int i = 0; i < row_num; i++)
        first_pattern[i] = new char[row_num]; 
    for(u_int i = 0; i < row_num; i++)
        fin>>first_pattern[i];

    char** second_pattern = new char*[row_num]; 
    for(u_int i = 0; i < row_num; i++)
        second_pattern[i] = new char[row_num]; 
    for(u_int i = 0; i < row_num; i++)
        fin>>second_pattern[i];
    //judge pattern
    u_int pattern = 0;
    if(Is90(first_pattern,second_pattern,row_num))
        pattern = 1;
    else if(Is180(first_pattern,second_pattern,row_num))
        pattern = 2;
    else if(Is270(first_pattern,second_pattern,row_num))
        pattern = 3;
    else if(Reflection(first_pattern,second_pattern,row_num))
        pattern = 4;
    else{
        char** temp_pattern = new char*[row_num]; 
        for(u_int i = 0; i < row_num; i++)
            temp_pattern[i] = new char[row_num]; 
        Reflect(first_pattern,temp_pattern,row_num);
        if(Is90(temp_pattern,second_pattern,row_num)||Is180(temp_pattern,second_pattern,row_num)
        ||Is270(temp_pattern,second_pattern,row_num))
            pattern = 5;
        else if(NoChange(first_pattern,second_pattern,row_num))
            pattern = 6;
        else
            pattern = 7;
        for(u_int i = 0; i < row_num; i++){
            delete[] temp_pattern[i];
        }
    }
    ofstream fout("transform.out");
    fout<<pattern<<endl;
    //cout<<pattern<<endl;
    //cout<<first_pattern[2]<<endl;
    //cout<<second_pattern[2]<<endl;
    for(u_int i = 0; i < row_num; i++){
        delete[] first_pattern[i];
        delete[] second_pattern[i];
    }
     
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值