SOJ4293 Product
来源:互联网 发布:csmar数据库是免费的么 编辑:程序博客网 时间:2024/05/01 09:08
统计大集合A中所有含奇数个元素的子集S中元素乘积的和!(我已经尽量说的很不饶了= =)
设ans1是A中所有奇数集元素积的和(要求的答案),ans2是A中所有偶数集元素积的和。
赋初值,令ans1=0,ans2=1(方便每次从空集变成单元素集的过程)
每个奇数集加入一个元素x后会变成偶数集,其元素积的和会乘以x,偶数集亦然。
这样每次加入x操作有:
ans1=ans1+ans2*x (1)
ans2=ans2+ans1*x (2)
删除操作时即是已知方程左边求右边,用(2)式乘以x减去(1)式,差除以(x*x-1),可以求出新的ans1,同理可求ans2,注意除法要用逆元。
#include <cstdio>typedef long long ll;int mod = 1000000007;int n;char cmd[10];ll x,ans1[2],ans2[2];bool flag;ll inv(ll xx){ ll res=1; int k=mod-2; while (k) { if (k&1) res=(res*xx)%mod; xx=(xx*xx)%mod; k>>=1; } return res;}int main(){ while (scanf("%d",&n)==1) { ans1[0]=0; ans2[0]=1; flag=0; while (n--) { flag^=1; scanf("%s %lld",cmd,&x); if (cmd[0]=='i') { ans1[flag]=(ans1[flag^1]+(ans2[flag^1]*x)%mod)%mod; ans2[flag]=(ans2[flag^1]+(ans1[flag^1]*x)%mod)%mod; } else { ans1[flag]=((((ans2[flag^1]*x)%mod-ans1[flag^1]+mod)%mod)*inv((x*x-1)%mod))%mod; ans2[flag]=((((((ans1[flag^1])*x)%mod)-ans2[flag^1]+mod)%mod)*inv((x*x-1)%mod))%mod; } printf("%lld\n",ans1[flag]); } } return 0;}
- SOJ4293 Product
- product
- Product
- Product
- Product
- Product
- Max product
- 2510: Product
- 10106 - Product
- JOJ2510:Product
- Product line
- 10106 - Product()
- uva10106 - Product
- 10106 - Product
- 10106 - Product
- 5309 Product
- Product Management
- 10106 - Product
- 注册信息
- H264 的 NAL 的问题
- h.264 SODB RBSP EBSP的区别
- [2013.7.23] 工作日志
- 软件工程的事实与谬误(转)
- SOJ4293 Product
- Android slidingMenu导入出现的问题
- 索引效率优化
- CKEditor 自主控制图片上传
- KVM与LINUX
- SQL索引优化
- POJ2586:Y2K Accounting Bug
- Cocos2d-x动画CCAnimate CCAnimation
- linux永久关闭selinx和防火墙