CodeForces - 492D (思维+数论)

题目链接
题意:
Vanya每秒打x次,Vova每秒打y次,询问每次最后一击是谁打的

思路:
Vanya 1/x 秒打一次,Vova 1/y秒打一次
同乘x * y后为y:x,x与y的最小公倍数为x*y/gcd(x,y),还原后为1/gcd(x,y),即每1/gcd(x,y) 秒两人会同时打一次,则每个周期T一共打了x/gcd(x,y)+y/gcd(x,y)
在x,y中选择小的那个,建一个num数组,num[i]表示一个周期内Vanya或Vova打了第i下时两人一共所打的次数(一开始没有选择小的导致爆了long long,然后用double结果又被G++卡了精度orz)
之后对于每次查询只需要模T后二分查找即可得出答案。
题目挺水,就是脑子不好使。。。

代码如下

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll num[1000010];
int main()
{
   
	int n,x,y;
	scanf
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值