hihododer #1584 : Bounce 【规律】

来源:互联网 发布:如何解析网址域名 编辑:程序博客网 时间:2024/06/10 23:41



题意:

     

         给你一个n*m的棋盘, 起初一个弹珠从棋盘左上角开始朝右下方45°方向弹射,遇到墙之后转向90°。遇到拐角停止。

         问最后小球停止后,只经过一次的网格有多少个。


题解:


         只经过一次的网格数=路径长度-走过两次的方格数*2;

         路径长度= lcm(n-1,m-1);

         走过两次的方格数=[(n-1)/gcd(n-1,m-1)-1][(m-1)/gcd(n-1,m-1)-1]/2;


#include<bits/stdc++.h>using namespace std;#define ll long longint main(){    ll n,m;    while(~scanf("%lld %lld",&n,&m)){        ll t=__gcd(n-1,m-1);        ll ans1=(n-1)*(m-1)/t+1;        ll ans2=(n-1)/t-1;        ll ans3=(m-1)/t-1;        printf("%lld\n",ans1-ans2*ans3);    }    return 0;}


原创粉丝点击