标签: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