USACO 1.2 Transformations (transform)

来源:互联网 发布:阿里云域名交易 编辑:程序博客网 时间:2024/04/28 19:47
/*ID: haolink1PROG: transformLANG: 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;}

0 0