USACO Transformation源码

/*
ID: bbsunch2
PROG: transform
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

vector<vector<char> > rotate90(vector<vector<char> > formerMatrix, int num)
{
    vector<vector<char> > latterMatrix;
    for(int i = 0; i < num; i++)
    {
        vector<char> lineA;
        for(int j = 0; j < num; j++)
        {
            char a = formerMatrix[num-j-1][i];
            lineA.push_back(a);
        }
        latterMatrix.push_back(lineA);
    }
    return latterMatrix;
}

vector<vector<char> > rotate180(vector<vector<char> > formerMatrix, int num)
{
    vector<vector<char> > latterMatrix;
    for(int i = 0; i < num; i++)
    {
        vector<char> lineA;
        for(int j = 0; j < num; j++)
        {
            char a = formerMatrix[num-i-1][num-j-1];
            lineA.push_back(a);
        }
        latterMatrix.push_back(lineA);
    }
    return latterMatrix;
}

vector<vector<char> > rotate270(vector<vector<char> > formerMatrix, int num)
{
    vector<vector<char> > latterMatrix;
    for(int i = 0; i < num; i++)
    {
        vector<char> lineA;
        for(int j = 0; j < num; j++)
        {
            char a = formerMatrix[j][num-i-1];
            lineA.push_back(a);
        }
        latterMatrix.push_back(lineA);
    }
    return latterMatrix;
}

vector<vector<char> > reflection(vector<vector<char> > formerMatrix, int num)
{
    vector<vector<char> > latterMatrix;
    for(int i = 0; i < num; i++)
    {
        vector<char> lineA;
        for(int j = 0; j < num; j++)
        {
            char a = formerMatrix[i][num-j-1];
            lineA.push_back(a);
        }
        latterMatrix.push_back(lineA);
    }
    return latterMatrix;
}

bool compareMatrix(vector<vector<char> > formerMatrix, vector<vector<char> > latterMatrix, int num)
{
    bool matrixEqual = true;
    for(int i = 0; i < num; i++)
    {
        bool lineEqual = true;
        for(int j = 0; j < num; j++)
        {

            if(formerMatrix[i][j] != latterMatrix[i][j])
            {
                lineEqual = false;
                break;
            }
        }
        if(lineEqual == false)
        {
            matrixEqual = false;
        }
    }
    return matrixEqual;
}

int main() {
    ofstream fout ("transform.out");
    ifstream fin ("transform.in");
    vector<vector<char> > matrixA;
    vector<vector<char> > matrixB;
    int num = 0;
    fin >> num;
    for(int i = 0; i < num; i++)
    {
        vector<char> lineA;
        for(int j = 0; j < num; j++)
        {
            char a;
            fin >> a;
            lineA.push_back(a);
        }
        matrixA.push_back(lineA);
    }
    for(int i = 0; i < num; i++)
    {
        vector<char> lineB;
        for(int j = 0; j < num; j++)
        {
            char b;
            fin >> b;
            lineB.push_back(b);
        }
        matrixB.push_back(lineB);
    }
    vector<vector<char> > matrixRotate = rotate90(matrixA, num);
    if(compareMatrix(matrixRotate,matrixB,num))
    {
        fout << 1 << endl;
        return 0;
    }
    matrixRotate = rotate180(matrixA,num);
    if(compareMatrix(matrixRotate,matrixB,num))
    {
        fout << 2 << endl;
        return 0;
    }
    matrixRotate = rotate270(matrixA,num);
    if(compareMatrix(matrixRotate,matrixB,num))
    {
        fout << 3 << endl;
        return 0;
    }
    vector<vector<char> > Matrixreflaction = reflection(matrixA,num);
    if(compareMatrix(Matrixreflaction,matrixB,num))
    {
        fout << 4 << endl;
        return 0;
    }
    matrixRotate = rotate90(Matrixreflaction, num);
    if(compareMatrix(matrixRotate,matrixB,num))
    {
        fout << 5 << endl;
        return 0;
    }
    matrixRotate = rotate180(Matrixreflaction,num);
    if(compareMatrix(matrixRotate,matrixB,num))
    {
        fout << 5 << endl;
        return 0;
    }
    matrixRotate = rotate270(Matrixreflaction,num);
    if(compareMatrix(matrixRotate,matrixB,num))
    {
        fout << 5 << endl;
        return 0;
    }
    if(compareMatrix(matrixA,matrixB,num))
    {
        fout << 6 << endl;
        return 0;
    }
    fout << 7 << endl;
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值