zoukankan      html  css  js  c++  java
  • [题解]第十一届北航程序设计竞赛预赛——H.高中数学题

    题目描述

    解题思路

    可以求得通项公式:an = 2n + 1,所以问题就变成等差数列求异或和,这个具体为什么对我还不能很好地解释清楚,先挖坑吧。

    附:c++代码

     1 #include <iostream>
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 
     6 typedef unsigned long long llt;
     7 
     8 llt Cal(llt x, llt d, llt P, llt Num)
     9 {
    10     llt ret = 0;
    11     ret += (x / P) * Num;
    12     x %= P;
    13     ret += (d / P) * Num * (Num - 1) / 2;
    14     d %= P;
    15     if (d * Num + x < P)
    16         return ret;
    17     else
    18         return ret + Cal((d * Num + x) % P, P, d, (d * Num + x) / P);
    19 }
    20 
    21 llt My_Xor(llt l, llt r, llt d)
    22 {
    23     llt Num = r - l +1;
    24     llt x = l * 2 + 1;
    25     llt ans = 0, Sum, P = 1;
    26     for (llt i = 1; i <= 36; i++)
    27     {
    28         Sum = Cal(x, d, P, Num);
    29         if (Sum & 1)
    30             ans += P;
    31         P <<= 1;
    32     }
    33     return ans;
    34 }
    35 
    36 int main()
    37 {
    38     //freopen("mi.in", "r", stdin);
    39     //freopen("H.out", "w", stdout);
    40     int n, i;
    41     llt l, r, ans;
    42     scanf("%d", &n);
    43     for(i = 1; i <= n; i++)
    44     {
    45         //scanf("%I64d%I64d", &l, &r);
    46         cin >> l >> r;
    47         ans = My_Xor(l, r, 2);
    48         //printf("%I64d
    ", ans);
    49         cout << ans <<endl;
    50     }
    51     return 0;
    52 }
    View Code

    另一种思路

    这是官方给出的题解。

  • 相关阅读:
    LInux设备驱动分析—— kmalloc和kzalloc函数
    g++使用总结
    Redis那些事(一) — Redis简介
    C++后台知识点总结(一)
    秋招复习-C++(三)
    C++之类成员的访问权限详解(一)
    c++内联函数解析(inline)
    论文图片
    markdown Typora学习随笔
    ROS 导航设计随笔
  • 原文地址:https://www.cnblogs.com/CQBZOIer-zyy/p/5049460.html
Copyright © 2011-2022 走看看