UVALive 4264 Message(Regionals 2008 :: Asia - Taipei+模拟)

【题目链接】:click here~~

【题目大意】给你n个10*10 的01组成的图像,再给你一个匹配图像,其中匹配图像可以看做是前面n个图像通过0,90,270,360度旋转得到,其中如果图像失真数小于20以内可以忽略,问匹配图像可以由前面那几个图像旋转得到。

【思路】:比赛的时候由没有看清楚题意,其实看懂了题目就很简单,直接模拟即可。

代码:

/*
* Problem: UVALive 4264
* Running time: 46MS
* Complier: G++
* Author: javaherongwei
* Create Time: 20:16 2015/10/14 
*/
#include <bits/stdc++.h>
using namespace std;
const int maxn=111;
const int inf=0x3f3f3f3f;
inline int max(int a,int b){return a>b?a:b;}
inline int min(int a,int b){return a<b?a:b;}
int alpq[maxn][11][11];
int a[11][11];
void Rotate()
{
    int c[11][11];
    for(int i=1; i<=10; ++i)
        for(int j=1; j<=10; ++j)
            c[10-j+1][i]=a[i][j];
    for(int i=1; i<=10; ++i)
        for(int j=1; j<=10; ++j)
            a[i][j]=c[i][j];
}
int Function(int b[11][11])
{
    int s=0;
    for(int i=1; i<=10; ++i)
        for(int j=1; j<=10; ++j)
            if(b[i][j]!=a[i][j]) s++;
    return s;
}
int main()
{
    //freopen("1.txt","r",stdin);
    int t;
    while(cin>>t&&t)
    {
        char op[65];
        for(int k=1; k<=t; ++k)
        {
            cin>>op[k];
            for(int i=1; i<=10; ++i)
                for(int j=1; j<=10; ++j)
                    scanf("%1d",&alpq[k][i][j]);
        }
        int tt,res;
        cin>>tt;
        for(int k=1; k<=tt; ++k)
        {
            for(int i=1; i<=10; ++i)
                for(int j=1; j<=10; ++j)
                   scanf("%1d",&a[i][j]);
            for(int i=1; i<=t; ++i)//枚举t个原来的图像
            {
                for(int z=1; z<=4; ++z)//枚举四个旋转方向
                {
                    int ck=Function(alpq[i]);
                    if(ck<=20)
                    {
                        res=i;
                    }
                    Rotate();
                }
            }
            printf("%c",op[res]);
        }
        cout<<endl;
    } return 0;
}
/*
Sample Input
2
a
0000000000
0111111110
0111110011
0111111100
0000110000
0000110000
0001111100
0011111110
0000000000
0000000000
X
0110000110
0110000110
0011001100
0011001100
0001111000
0001111000
0011001100
0011001100
0110000110
0110000110
3
0110000110
0110000110
0011001100
0011001100
0001111000
0001111000
0011001100
0011001100
0110000110
0110000110
0000000000
1100000011
1111001111
0011111100
0000110000
0000110000
0011111100
1111001111
1100000011
0000000000
0000000000
0000001110
1110001110
0000110001
0011111110
0011111110
0011001010
0011001010
0010000110
0000000010

Sample Output
XXa
*/


你可能感兴趣的:(比赛,uvalive)