P3909 异或之积
2024-08-25 23:06:50
为什么叫做异或之积?
答曰:只要不关乎Alice和Bob就行
做完这道水题,感觉自己弱爆了。
一开始就要考虑暴力\(O(n^3)\)的优化。
然后就注意到了题目中的\(6\)为什么不是⑨
然后就想到了全排列,然后根据全排列瞎搞了一波。
如下:
注意到\(A_i*A_j*A_k=A_j*A_k*A_i\),然后三个元素的全排列个数就是6
然后题意转变为从一堆数中,不重复,不遗漏的选出三个元素,求出所有三元组的积的和
怎么实现呢?
一开始就是\(O(N^3)\)的暴力
然后发现可以利用前缀和的思想,将后两个数的乘积算出来,在前缀和一下。然后在\(O(N)\)的枚举第一个数,利用前缀和计算出和
然后又可以使用类似的思想,将那个\(O(N^2)\)的预处理也变成\(O(N)\)的。
但是
我调了好久,还是没有gan出来。
然后看了看其他人的code。发现
我们只要处理出三个前缀和就行了。
代码如下
#include<cstdio>
#include<algorithm>
#include<iostream>
const int maxn=1000010;
const long long mod=1e9+7;
int s[maxn];
int S[maxn];
int main()
{
int n;
scanf("%d",&n);
long long pas;
long long ans=0;
for(int i=1;i<=n;i++)
{
scanf("%lld",&pas);
s[i]=(s[i-1]+pas)%mod;
S[i]=(S[i-1]+pas*s[i-1])%mod;
ans=(ans+pas*S[i-1])%mod;
}
pas=ans;
for(int i=1;i<=5;i++)
ans=(ans+pas)%mod;
printf("%lld",ans);
}
真的是纯真不做作。吐血emmm
发现自己口胡了一波看似正解的东西,被一波code技巧打败了。
sad
最新文章
- php在5.5.0默认提供了Zend OPcache
- [软件推荐]快速文件复制工具(Limit Copy) V4.0 绿色版
- bitmap算法
- Deep Learning 12_深度学习UFLDL教程:Sparse Coding_exercise(斯坦福大学深度学习教程)
- hdu 4253 Two Famous Companies BZOJ 2654 tree
- 苹果操作系统Mac OS X
- rpm-bin
- 操作native window的QxtWindowSystem (好像是一个IM的一部分)
- 宣布与 NBC 合作直播索契冬季奥运
- Regex阅读笔记(三)之固化分组
- centos环境下安装redis
- linux驱动编写之中断处理
- Windows 系统安装多个版本JDK, 修改环境变量不生效
- bzoj 3811: 玛里苟斯
- javadoc中{@link}与@see的简单使用以及区别
- WebDriver高级应用实例(6)
- 【转】Mapped Statements collection does not contain value for解决
- ambassador 学习六 Module说明
- sass(混合mixin的调用、@content)
- Redis工具之Jedis