ACdream 1139(Sum-逆元)
来源:互联网 发布:淘宝网雪地靴童鞋 编辑:程序博客网 时间:2024/06/05 14:29
J - Sum
Problem Description
You are given an N*N digit matrix and you can get several horizontal or vertical digit strings from any position.
For example:
123
456
789
In first row, you can get 6 digit strings totally, which are 1,2,3,12,23,123.
In first column, you can get 6 digit strings totally, which are 1,4,7,14,47,147.
We want to get all digit strings from each row and column, and write them on a paper. Now I wonder the sum of all number on the paper if we consider a digit string as a complete decimal number.
Input
The first line contains an integer N. (1 <= N <= 1000)
In the next N lines each line contains a string with N digit.
Output
Output the answer after module 1,000,000,007(1e9+7)。
Sample Input
3123456789
Sample Output
2784
所以简化公式
对于同行/列 需要累加的值为 a1*111+a2*22+a3*3
发现规律sum=∑a(10^(n-i+1)-1)/9*i %F
#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<functional>#include<iostream>#include<cmath>#include<cctype>#include<ctime>using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Lson (x<<1)#define Rson ((x<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,127,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define INF (2139062143)#define F (1000000007)#define MAXN (1000+10)long long mul(long long a,long long b){return (a*b)%F;}long long add(long long a,long long b){return (a+b)%F;}long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;}typedef long long ll;int n;char a[MAXN][MAXN];ll p10[MAXN]={0};ll pow2(ll b) { if (b==1) return 10; if (b==0) return 1; if (p10[b]) return p10[b]; ll p=pow2(b/2)%F; p=(p*p)%F; if (b&1) { p=(p*10)%F; } p10[b]=p; return p; } ll pow2(ll a,ll b){if (b==1) return a;if (b==0) return 1;ll p=pow2(a,b/2)%F;p=p*p%F;if (b&1){p=(p*a)%F;}return p;}ll tot[MAXN]={0};ll mulinv(ll a){return pow2(a,F-2);}int main(){//freopen("sum.in","r",stdin);//freopen("sum.out","w",stdout);scanf("%d",&n);For(i,n){scanf("%s",a[i]+1);}/*For(i,n){For(j,n) cout<<a[i][j];cout<<endl;}*/For(i,n){For(j,n) tot[i]+=a[i][j]-'0'+a[j][i]-'0';}//For(i,n) cout<<tot[i]<<endl;//cout<<mul(pow2(10,1232),mulinv(pow2(10,1232)))<<endl;//cout<<mulinv(9);ll c9=mulinv(9);For(i,n) p10[i]=pow2(i);ll ans=0;For(i,n){ll t=sub(p10[n-i+1],1),a=tot[i];t=mul(t,c9);t=mul(a,t);ans=add(ans,mul(t,i));}cout<<ans<<endl;return 0;}
- ACdream 1139(Sum-逆元)
- ACdream: Sum
- acdream(16) J-Sum
- ACdream 1154 Lowbit Sum
- acdream--Matrix sum
- acdream 1171 Matrix sum
- ACdream 1156_LCP SUM
- ACdream P1174 Sum
- ACdream OJ 1154 Lowbit Sum
- acdream 1431 Sum vs Product
- ACdream 1431 Sum vs Product
- ACdream 1431Sum vs Product
- ACdream1139 Sum(推公式+逆元求解)
- ACdream 1154 Lowbit Sum(数学:推理)
- 数位DP ACdream 1154 Lowbit Sum
- [费用流] acdream 1171 Matrix sum
- ACdream 1154 Lowbit Sum (数位DP)
- ACdream 1154 Lowbit Sum(数位DP)
- 安卓刷机遇到的一些问题
- 随记
- 数组的归并排序(经典实现:使用Ο(n)的辅助空间,递归)
- 数据结构课程设计——通讯录系统设计(C语言)
- 让你真正明白什么是hive
- ACdream 1139(Sum-逆元)
- hibernate:Hibernate连接池小结
- 汇编语言的应用
- 第四题(在二元树中找出和为某一值的所有路径)
- Eclipse j安装ADT插件遇到问题(eclipse-jee-luna-R-win32-x86_64)
- VC/MFC 隐藏文件
- 最强大脑之最强记忆,是学霸就拿100分
- C 一个字符串有三段,第一段原样输出,第二段为要输出字符串的长度,第三段为根据第二段长度补齐第一段
- Hive安装指导