您的位置:首页 > 其它

URAL 1051 Simple Game on a Grid

2012-05-07 13:34 204 查看
URAL_1051

这个题目基本算是YY出来的,具体也没有去证明。

由于N和M可能比较大,于是就想如何将其变成小一点矩阵去考虑,这时发现3*x(x>=2)的矩阵有一个特性,可以变成3*(x-1)的矩阵,利用这个特性,我们可以将N*M(N,M>=3)的矩阵变成3*3、3*4、3*5、4*4、4*5、5*5之中的一个(因为可以通过一定的手段让x*y的矩阵变成(x-3)*y的矩阵,有个前提就是y>=3,至于怎么搞还是留给大家做思考吧,就不多说了),这样只要考虑有限个矩阵的情况就可以得到最后的结果了(不过我没有证明变成这样会不会使结果更差)。

画一下就可以得到3*3、3*4、3*5最后只能变成2个,而4*4、4*5、5*5最后可以变成1个。

接下来还要讨论一下2*x和1*x的情况,对于2*x(x>=4)也可以得到一个特性,即可以变成2*(x-3)的矩阵。

#include<stdio.h>
#include<string.h>
void swap(int &x, int &y)
{
int t;
t = x, x = y, y = t;
}
int main()
{
int x, y;
while(scanf("%d%d", &x, &y) == 2)
{
if(x > y)
swap(x, y);
if(x == 1)
printf("%d\n", y / 2 + (y % 2 ? 1 : 0));
else if(x == 2)
{
y %= 3;
printf("%d\n", y ? 1 : 2);
}
else
{
x = x % 3 + 3, y = y % 3 + 3;
if(x > y)
swap(x, y);
printf("%d\n", x == 3 ? 2 : 1);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: