P4932 浏览器

    • 982通过
    • 3.6K提交
  • 题目提供者 __stdcall
  • 评测方式 云端评测
  • 标签 位运算,按位 进制 O2优化
  • 难度 提高+/省选-
  • 时空限制 1500ms / 512MB

题解

  • 提示:收藏到任务计划后,可在首页查看。
  • 体验新版界面

    最新讨论 显示

    推荐的相关题目 显示

    题目背景

    __stdcall在用Edge玩slay的时候,鼠标会经常失灵,这让她十分痛苦,因此她决定也要让你们感受一下Edge制造的痛苦。

    题目描述

    __stdcall给了你n个点,第i个点有权值x[i],对于两个点u和v,如果x[u] xor x[v]的结果在二进制表示下有奇数个1,那么在u和v之间连接一个Edge,现在__stdcall想让你求出一共有多少个Edge。

    如果你没能成功完成任务,那么__stdcall会让你痛苦一下,你这个测试点就没分了。

    输入输出格式

    输入格式:

    一行六个整数,n,a,b,c,d,x[0]。

    n是点的个数,每个点的权值需要用如下的方式生成。

    你需要使用a,b,c,d和x[0]生成一个数组x,生成方式是这样的。

    $x_i = (ax_{i-1}^2 + bx_{i-1} + c) \mod d$

    x[i]就是第i个点的权值,点的标号是1到n。

    输出格式:

    输出一个整数,表示一共有多少个Edge。

    输入输出样例

    输入样例#1: 复制
    8 98 24 20 100 44
    
    输出样例#1: 复制
    12
    
    输入样例#2: 复制
    1000 952537 601907 686180 1000000 673601
    
    输出样例#2: 复制
    249711
    

    说明

    我们用v表示权值中的最大值。

    对于前20%的数据,n<=10。

    对于前40%的数据,n<=100。

    对于前60%的数据,n<=1000。

    对于前80%的数据,n<=1e6。

    对于前90%的数据,v<=1e6。

    对于100%的数据,n<=1e7,v<=1e9。

    保证a,b,c,d,x[0]都是int内的非负整数。

    提示
    标程仅供做题后或实在无思路时参考。
    请自觉、自律地使用该功能并请对自己的学习负责。
    如果发现恶意抄袭标程,将按照I类违反进行处理。