什么阴间十进制状压

题意:给定 $ n $ 数字,求定义函数 $ G(x) $ 能够表示 满足“十进制按位与为 $ x $”的集合的平方和之和乘上 \(x\),求 \(\bigoplus _{i=0}^{999999}G(i)\)。

这个题很明显干的事情就是让我们对每个数求出一车集合,然后将这一车集合用奇怪的方式加密输出。

当你在求恰好的时候,先想想如何求包含,因为恰好特别难求。

包含不就是个十进制的超集求和?

枚举哪一位,内层再套一个枚举每一个下标,如果这个下标的这一位是 \(9\) 就不转移,否则就做一个后缀和。

然后已经得到包含了,如何得到恰好?

先不想十进制,先来想想二进制干了些什么。

二进制似乎就是做了类似 \(a[n][m]=s[n][m]-s[n-1][m]-s[n][m-1]+s[n-1][m-1]\) 的事情?

也就是差分,所以再差分回去。

不过要注意最前面的后缀和是合并集合意义上的后缀和,后面的差分仅仅是对平方和的差分。

为什么是这样的?

假设这个数组是 \(f[S]\),那么 \(f[S]\) 包含的是一车平方和之和,平方和之间没有任何关系,当然可以做一个差分把多的部分扔掉。

那么问题来了,如何维护平方和?

\[(\sum_{x \in S1} x+\sum_{y \in S2} y)^2=(\sum_{x \in S1})(\sum_{y \in S2}y)^2+(\sum_{x \in S1}x)(\sum_{y \in S2}y)+(\sum_{x \in S1}x)^2(\sum_{y \in S2}
\]

所以维护一个 $ 0 $ 次和与一个一次和,再维护一个二次和。可以做到 \(O(6 \times 10^6 \times 2^2)\)。

一次和用类似的推柿子即可。

不过理论上来说这玩意儿实际上是低次多项式,所以可以使用将多项式转化为下降幂多项式的 trick,\(O(2)\) 合并两个下降幂多项式,最后 \(O(2)\) 得到答案,复杂度是 \(O(6 \times 10^6 \times 2+10^6 \times 2+2^2)\)。不过没有啥意义

注意一下这题的输出有点儿奇怪,是取模之后乘上一个数再异或,而不是乘上一个数之后取模再异或

#include<cstdio>
#include<cctype>
typedef unsigned ui;
const ui M=1000005,mod=1e9+7,pw10[]={1,1,10,100,1000,10000,100000};
ui n,B[M];char buf[M*7],*p=buf;
inline ui read(){
ui n(0);char s;while(!isdigit(s=*p++));while(n=n*10+(s&15),isdigit(s=*p++));return n;
}
struct data{
ui s0,s1,s2;
data(const ui&s0=1,const ui&s1=0,const ui&s2=0):s0(s0),s1(s1),s2(s2){}
inline data operator*(const data&it)const{
return data(1ull*s0*it.s0%mod,(1ull*s1*it.s0+1ull*s0*it.s1)%mod,(1ull*s2*it.s0+2ull*s1*it.s1+1ull*s0*it.s2)%mod);
}
}f[M];
signed main(){
ui i,j,k,x;unsigned long long ans(0);fread(buf,1,sizeof buf,stdin);n=read();
for(i=1;i<=n;++i)x=read(),f[x]=f[x]*data(2,x,1ull*x*x%mod);
for(i=1;i<=6;++i)for(j=999999;~j;--j)if(j/pw10[i]%pw10[2]^9)f[j]=f[j]*f[j+pw10[i]];
for(i=0;i^1000000;++i)B[i]=f[i].s2;
for(i=1;i<=6;++i)for(j=0;j^1000000;++j)if(j/pw10[i]%pw10[2]^9)B[j]=(B[j]+mod-B[j+pw10[i]])%mod;
for(i=0;i^1000000;++i)ans^=1ull*i*(B[i]%mod);printf("%llu",ans);
}

CF772D题解的更多相关文章

  1. 【CF772D】Varying Kibibits FWT

    [CF772D]Varying Kibibits 题意:定义函数f(a,b,c...)表示将a,b,c..的10进制下的每一位拆开,分别取最小值组成的数.如f(123,321)=121,f(530,  ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

随机推荐

  1. Docker私有仓库与Harbor部署使用

    Docker私有仓库与Harbor部署使用 目录 Docker私有仓库与Harbor部署使用 一.本地私有仓库 1. 下载registry镜像 2. 在daemon.json文件中添加私有镜像仓库地址 ...

  2. 关于LVS的问题总结

    关于LVS的问题总结 目录 关于LVS的问题总结 1. LVS工作模式及区别 2. LVS调度算法 3. LVS调度器你的常用算法(均衡策略) (1)固定调度算法:rr.wrr.dh.sh (2)动态 ...

  3. 手写一个springboot starter

    springboot的starter的作用就是自动装配.将配置类自动装配好放入ioc容器里.作为一个组件,提供给springboot的程序使用. 今天手写一个starter.功能很简单,调用start ...

  4. 详解Spring DI循环依赖实现机制

    一个对象引用另一个对象递归注入属性即可实现后续的实例化,同时如果两个或者两个以上的 Bean 互相持有对⽅,最终形成闭环即所谓的循环依赖怎么实现呢属性的互相注入呢? Spring bean生命周期具体 ...

  5. JNDI漏洞利用探索

    最近学习了师傅寻找的一些JNDI漏洞的利用链受益匪浅,自己也尝试关于JNDI漏洞利用做一些挖掘,目前JNDI在利用过程我想到了两个问题. 测试每一个JNDI Bypass 利用链都需要手动更改URL很 ...

  6. JVM内存结构的组成、各部分功能作用

    一.程序计数器  作用:是记住下一条jvm指令的执行地址  特点: 是线程私有的 不会存在內存溢出 二.虚拟机栈 每个线程运行时所需要的内存,称为虚拟机栈 每个栈由多个栈帧(Frame) 组成,对应着 ...

  7. netty系列之:channelPipeline详解

    目录 简介 ChannelPipeline 事件传递 DefaultChannelPipeline 总结 简介 我们在介绍channel的时候提到过,几乎channel中所有的实现都是通过channe ...

  8. 开源报表工具太复杂?不如用这款免费web报表工具

    随着信息系统的高速发展,报表平台逐渐成为了信息系统当中最为核心和重要的功能模块.报表工具有助于将原始数据可视化显示,使决策者或者相关人员能够一览整体的数据趋势,完整的报表解决方案会提供多样的表格数据展 ...

  9. 用商业智能BI做出来的报表,甩别人一条街!

    同样是做数据分析的,会商业智能BI的人做的报表都比别人好看.这里所说的好看其实是包括了两个意义,一是排版.色彩搭配等,颜值上的好看:二是把数据分析结果展现地直观易懂上的"好看".想 ...

  10. Spring系列22:Spring AOP 概念与快速入门篇

    本文内容 Spring AOP含义和目标 AOP相关概念 声明式AOP快速入门 编程式创建代理对象 Spring AOP含义和目标 OOP: Object-oriented Programming 面 ...