标签:ural 1762 search for a hiding-
| input | output | 
|---|---|
| 7 5 | 11 | 
| 2 3 | 3 | 
题意:n*m的空白方格,从四个角落中的某一个进入,斜着45度角移动,所经过的方块涂成黑色,碰到墙壁转90度接着移动直到走到某一个角落出去,途中若遇到前面已经涂黑的方格要再次把它涂白。问最后出去后一共有多少方格是黑色的。
思路:首先n和m自减,再求出n和m自减后的最小公倍数a(当走出去的时候走的总步数=a+1),接下来就是求有多少方格重复走了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#pragma comment (linker,"/STACK:102400000,102400000")
#define maxn 1005
#define MAXN 2005
#define mod 1000000009
#define INF 0x3f3f3f3f
#define pi acos(-1.0)
#define eps 1e-6
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
#define FRE(i,a,b)  for(i = a; i <= b; i++)
#define FRL(i,a,b)  for(i = a; i < b; i++)
#define mem(t, v)   memset ((t) , v, sizeof(t))
#define sf(n)       scanf("%d", &n)
#define sff(a,b)    scanf("%d %d", &a, &b)
#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
#define pf          printf
#define DBG         pf("Hi\n")
typedef long long ll;
using namespace std;
int main()
{
    __int64 n,m;
    while (~scanf("%I64d%I64d",&n,&m))
    {
        if (n<m) swap(n,m);
        n--,m--;
        if (n%m==0){
            pf("%I64d\n",n+1);
            continue;
        }
        __int64 a=n/__gcd(n,m)*m;
        __int64 cnt=0,l=n;  //cnt记录重复走的方格数
        while (l<a)
        {
            cnt+=l/m;
            l+=n;
        }
        pf("%I64d\n",a-2*cnt+1);
    }
    return 0;
}
Search for a Hiding-Place (URAL 1762)
标签:ural 1762 search for a hiding-
原文地址:http://blog.csdn.net/u014422052/article/details/44176393