• Codeforces Round #752 (Div. 1) B. Moderate Modular Mode


    翻译:

    谁有两个偶数𝑥和𝑦。帮助他找到一个整数𝑛,使1≤𝑛≤2⋅1018,且𝑛mod𝑥=𝑦mod𝑛。这里,𝑎mod𝑏表示𝑎除以𝑏后的余数。如果有多个这样的整数,则输出any。可以证明,在给定的约束条件下,这样的整数总是存在的。

    输入
    第一行包含一个整数𝑡(1≤𝑡≤105)——测试用例的数量。

    每个测试用例的第一行也是唯一一行包含两个整数𝑥和𝑦(2≤𝑥,𝑦≤109,都是偶数)。

    输出
    对于每个测试用例,请打印满足命题条件的单个整数𝑛(1≤𝑛≤2⋅1018)。如果有多个这样的整数,则输出any。可以证明,在给定的约束条件下,这样的整数总是存在的。

    例子
    inputCopy
    4
    4 8
    4个2
    420 420
    69420 42068
    outputCopy
    4
    10
    420
    9969128
    请注意
    在第一个测试用例中,4mod4=8mod4=0。

    在第二个测试用例中,10mod4=2mod10=2。

    在第三个测试用例中,420mod420=420mod420=0。

    思路:

    很明显分为两种情况,x>=y,x=y的时候,n可以直接取得k*x+y,这样两边都是y;另一种情况就比较麻烦,因为n mod x,所以最终值肯定是小于x的,y mod n,所以我们要从y%x入手,y%x=y-y/x*x,我们可以取整数 p,使得 p * x <= y,那么此时 p * x % x = 0,y % (p * x) = y - p * x,
    由于 y 和 x 都是偶数,所以 y - p * x 一定也是一个偶数,
    我们只需取 [p * x, y] 的中值即可,
    也就是说 n = y - (y - p * x) / 2,
    换句话说,此时 y % (p * x) = y - p * x 等价于 y % x,那么 n = y - y % x / 2

    代码:

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #include
    11. #include
    12. #include
    13. using namespace::std;
    14. typedef long long ll;
    15. int n,t;
    16. ll x,y;
    17. void solv(){
    18. cin>>x>>y;
    19. if (y
    20. printf("%lld\n",x+y);
    21. }
    22. else if (x==y){
    23. printf("%lld\n",x);
    24. }
    25. else{
    26. printf("%lld\n",(y/x*x+y)/2);
    27. }
    28. }
    29. int main(){
    30. ios::sync_with_stdio(false);
    31. cin.tie(); cout.tie();
    32. cin>>t;
    33. while (t--) {
    34. solv();
    35. }
    36. return 0;
    37. }
    38.  


     

  • 相关阅读:
    JBoss漏洞:Jboss未授权访问漏洞
    【算法3.5】Dijkstra求最短路(完结)
    25K测试老鸟7年经验的面试心得,四种公司、四种问题…
    spring和springmvc常用注解
    android 各种偶现问题记录
    接口自动化测试专栏博客汇总
    [U3D ShaderGraph] 全面学习ShaderGraph节点 | 第二课 | Input/Geometry
    在Linux系统上检测GPU显存和使用情况
    05、docker安装nginx
    数据结构顺序表的操作,窗口界面(c语言版)
  • 原文地址:https://blog.csdn.net/weixin_63555280/article/details/128156644