噜啦噜啦噜呼呼呼 2024-04-09 02:18 采纳率: 66.3%
浏览 6
已结题

蓝桥杯2023异或和之和

img

请问为什么提示我编译失败啊?


/*
异或;如果1的个数是奇数个,则异或结果为1,否则为0
当一个区间内,这一位所对的1的个数是奇数时,这一位就产生了贡献;
当一个区间内,这一位所对的1的个数是偶数时,这一位就不产生贡献;
统计第i位所对的1的前缀和,如果到某个数字时,
所对前缀和是奇数,那么他就能够提供 (1+前面偶数的个数)个合法区间(即选取几个元素);
如果所对前缀和是偶数,那么他就能够提供 (前面奇数的个数)个合法区间
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
    int n;
    cin>>n;
    vector<int>a(n);
    for(int i=0;i<n;i++)
        cin>>a[i];
    int ans=0; //贡献总值
    for(int i=19;i>=0;i--)  //遍历每一位
    {
        int s=0,n0=1,n1=0; 
        //s为前缀和,即在第i位上到某个元素为止1的总数
        //n0为各前缀和为偶数个的个数
        //n0=1是因为当所对前缀和为奇数时算合法区间时用到(1+前面偶数的个数)
        //n1为各前缀和为奇数个的个数(n0和n1相当于合法区间个数)
        for(int j=0;j<n;j++)  //遍历每一个元素
        {
            int bit=(a[j]>>i)&1; //可判断元素a[j]在第i位上是否为1
            s+=bit;
            if(!s%2)  //奇数
            {
                ans+=(1<<i)*n0;
                n1++;
            }
            else
            {
                ans+=(1<<i)*n1;
                n0++;
            }
        }
    }
    cout<<ans<<std::endl;
}

int main()
{
    ios::sync_with_stdio(0);
    /*用于取消C++的输入/输出流与C的输入/输出函数(如printf和scanf)之间的同步。
    这样做通常可以加速输入/输出操作,特别是在使用C++的输入/输出流(如cin和cout)时。*/
    cin.tie(0);
    /*将cin与cout解绑。默认情况下,cin和cout是绑定的,这意味着每次从cin读取数据后,
    cout都会刷新其缓冲区。解绑它们可以提高输入/输出的效率。*/
    //cout.tie(0)
    solve()
    return 0;
}
  • 写回答

4条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-09 02:18
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 对于本题,需要统计每个区间中异或结果的二进制表示中每一位上的1的个数是否为奇数。 解决方案: 对于统计二进制表示中某一位上1的个数是否为奇数,可以采用前缀和的思想进行统计,即对于每一个元素的某一位,如果是1则在前缀和上加一,否则不加。然后在遍历数组的过程中,如果当前前缀和对应的二进制位上1的个数为偶数个,则当前元素可以提供 (1+前面偶数的个数) 个合法区间;如果是奇数,则可以提供前面奇数的个数个合法区间。 代码实现:
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月1日
  • 创建了问题 4月9日

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含