ACdream1139 Sum(推公式+逆元求解)
来源:互联网 发布:知乎日报首页图片 编辑:程序博客网 时间:2024/04/29 04:31
题目链接:http://acdream.info/problem?pid=1139
题意:
给定一个由0~9组成的矩阵,我们求行相邻的组成的数与列相邻的组成的数的和。
eg:
123
456
789
第一行组成的数有 1,2,3,12,23,123
第一列组成的数有 1,4,7,12,47,147.
暴力枚举所有的数肯定是不可取的,我们试着总结。
我们发现a[x][y]在行里出现的数对以后和的贡献为 x*a[x][y]sigma(10 ^(n-i)) (k<=x<=n)
同理a[x][y]在列里出现的数对以后和的贡献为 y*a[x][y]sigma(10 ^(n-i)) (y<=x<=n)
我们设sum[x]表示第x行与第x列的数的和 然后对以上的公式进行合并
sum = sigma( i * sum[i] * ( sigma(10^k)(i<=k<=n)))(1<=i<=n)
sigma(10^k)(i<=k<=n)用到等比数列求和,有除法,需要用到逆元
a/b (mod c) == a (mod b*c)/c
或者 a*~b (mod c)
代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <set>#include <map>#include <queue>#define PB push_back#define MP make_pair#define REP(i,n) for(int i=0;i<(n);++i)#define FOR(i,l,h) for(int i=(l);i<=(h);++i)#define DWN(i,h,l) for(int i=(h);i>=(l);--i)#define IFOR(i,h,l,v) for(int i=(h);i<=(l);i+=(v))#define CLR(vis) memset(vis,0,sizeof(vis))#define MST(vis,pos) memset(vis,pos,sizeof(vis))#define MAX3(a,b,c) max(a,max(b,c))#define MAX4(a,b,c,d) max(max(a,b),max(c,d))#define MIN3(a,b,c) min(a,min(b,c))#define MIN4(a,b,c,d) min(min(a,b),min(c,d))#define PI acos(-1.0)#define INF 1000000000#define LINF 1000000000000000000LL#define eps 1e-8#define LL long longusing namespace std;const int maxn = 1010;const LL mod = 1e9+7;char a[maxn][maxn];LL sum[maxn];LL multi(LL a,LL b){ LL ans = 0; while(b){ if(b&1) ans=(ans+a)%mod; b>>=1; a=(a+a)%mod; } return ans;}LL quick_mod(LL a,LL b){ LL ans = 1; while(b){ if(b&1) ans=multi(ans,a); b>>=1; a=multi(a,a); } return ans;}int main(){ int n; while(~scanf("%d",&n)){ REP(i,n) scanf("%s",a[i]); CLR(sum); REP(i,n) REP(j,n) sum[i]=sum[i]+a[j][i]-'0'+a[i][j]-'0'; LL ans=0; LL M = quick_mod(9LL,mod-2); REP(i,n){ LL t = (quick_mod(10,n-i)+mod-1)%mod; t=multi(t,M); t=multi(sum[i],t); ans=(ans+multi(i+1,t))%mod; } printf("%lld\n",ans); } return 0;}
0 0
- ACdream1139 Sum(推公式+逆元求解)
- zoj 3903 Ant【推公式+逆元】
- BZOJ3122 推公式+逆元+BSGS
- POJ 1845 Sumdiv 【推公式 | 逆元】
- HDU4675 GCD of Sequence(预处理阶乘逆元+推公式)
- Codeforces gym 101061 G【递推公式+逆元】
- XTU 1274 Matrix(逆元,推公式)
- 【HPU 1050 QAQ的公式求解(二)】+ 逆元
- 【HPU 1049 QAQ的公式求解(一)】+ 逆元
- 拯救LongMM (递推公式求解)
- Catalan数的递推公式求解
- 简单递推公式转换矩阵求解
- hdu-6128 Inverse of sum 推公式
- HDU 6128 Inverse of sum(推公式)
- 【HDU 5895】【指数循环节 矩阵 快速幂 逆元 推公式】Mathematician QSC 由递推式推公式
- hdu 5490 Simple Matrix 递推公式+逆元+组合数
- hdu 5698 求组合数(逆元+阶乘 递推公式
- 线性代数求解递推形式数列的通项公式
- md5加密32位
- 第15届浙江省赛题 (dfs)
- 非模态对话框内存释放
- 算法实现(5)大整数乘法
- iOS企业开发In House ipa发布流程
- ACdream1139 Sum(推公式+逆元求解)
- 学习数据结构的网站
- .Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结
- linealayout垂直布局,控件置为底部
- 模板方法(template method)模式
- 关于FFMPEG里读取的h264的AVPACKET存储nalu成为h264问题
- 一些表单验证常用的正则表达式收集
- hdu5256 序列变换 最长递增子序列
- 黑马程序员——网络编程