1. 程式人生 > >2017北京網絡賽 Bounce GCD加找規律

2017北京網絡賽 Bounce GCD加找規律

logs bsp pan 3.5 abs int 4.4 family cpp

題目鏈接:http://hihocoder.com/problemset/problem/1584

題意:就是求一個小球從矩陣的左上角,跑到矩形的右下角不能重復經過的格子,小球碰到墻壁就反射。

解法:規律題。先算出來小球一共會經過多少網格(包括重復的在內),再算出來有多少個網格過不止一次,兩者相減就可以了。對於n*m的矩形,經過觀察可以得到,小球彈跳中經過的網格總數是(n-1)*(m-1)/gcd(n-1,m-1)+1,對於9*15的矩形來說就是57。然後來考慮答案39和57的差值,18。對於18有3*6的組合方式,那麽對於3可以(9-1)/gcd(9-1,16-1)-1,對於6可以(15-1)/gcd(9-1,15-1)-1.難道是這樣湊出來的???套上去發現恰好可以過樣例。。然後就沒有然後了。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
    LL n,m;
    while(~scanf("%lld%lld",&n,&m)){
        LL ans = (n-1)/__gcd(n-1,m-1)*(m-1)-((n-1)/__gcd(n-1,m-1)-1)*((m-1)/__gcd(n-1,m-1)-1)+1;
        printf("%lld\n", ans);
    }
    return 0;
}

對於(n?1)×(m?1)gcd((n?1),(m?1))+1

2017北京網絡賽 Bounce GCD加找規律