2017北京網絡賽 Bounce GCD加找規律
阿新 • • 發佈:2017-09-24
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)g
2017北京網絡賽 Bounce GCD加找規律