首页 > 其他 > 详细

USACO 1.2 Transformations (transform)

时间:2014-02-19 22:21:01      阅读:320      评论:0      收藏:0      [点我收藏+]
/*
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;
}

USACO 1.2 Transformations (transform)

原文:http://blog.csdn.net/damonhao/article/details/19484545

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!