卡片


解题思路
其实吧,这道题挺简单的。
我们将B(下面都会用A和B代表秦王和柱子 (秦王绕柱走) )展开,当成一条线,那么我们就可以找到这条线和A的边长的最小公倍数——因为题目要求A回到原来的点。
但是如果你只这样做的话,我们看一下样例#1。咦?为什么输出是6而样例是8呢?其实你忽略了一点:在A绕过B的角的时候,只要不是恰巧吻合,就要比正常情况多转一次,我们再算出A的边长和B的边长的最小公倍数,我们用这个数除以A的边长,算出在这一段中A要滚几次,如果我们对于这个数字在加上角的个数,那么这就是对于这一段长A真正要滚的次数。
code
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll a,n,b,m;
int main()
{
cin>>a>>n>>b>>m;
ll s1=1,s2=1;
while(b*s1%a!=0)
s1++;
while((b*m*s2)%a!=0)
s2++;
cout<<s2*m*b/a/(b*s1/a)*(b*s1/a+(s1-1))<<endl;
}

被折叠的 条评论
为什么被折叠?



