Moderate Modular Mode(构造,数论,1600)

博客介绍了如何解决一个数学问题,给定两个偶数x和y,找到一个整数n使得n除以x的余数等于y除以n的余数。通过分析x和y的关系,得出当x>y时,n=x+y;当x≤y时,n=y-(y%x)/2。博主提供了一个形象化的解释,通过移动x长度来达到目标,并给出了C++代码实现。
摘要由CSDN通过智能技术生成

题目链接:

Problem - 1603B - Codeforces

题目大意:

给定两个偶数,求出满足n%x=y%n的n

思路:

x>y时    n=x+y即可

x<=y时  n一定满足 x<=n<=y

证明:

如果n<x     n%x=n,y%n<n     不满足

如果n>y     n%x<x,y%n=y>x 不满足

对于区间【x,y】如何确定n的值

参考大佬的思路,一个形象化的解释

 如图你处在原点,每次可移动x长度,然后可以到达p=y-y%x.因为x,y都是偶数,ymodx也是偶数。p可以两次移动(ymodx)/2距离到达y

n=y-(ymodx)/2,即为所求答案

n%x=(ymodx)/2

y%n=(ymodx)/2

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
void solve()
{
    int x,y,n;
    cin>>x>>y;
    if(x>y) cout<<x+y<<'\n';
    else cout<<y-y%x/2<<'\n';
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int t;
    cin>>t;
    while(t--) solve();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值