Codeforces 364A - Matrix
原题地址:http://codeforces.com/problemset/problem/364/A
题目大意:
给定一个数字a(0 ≤ a ≤ 109)和一个数列s(每个数都是一位,长度不超过4000),定义一个矩阵Mij = si * sj ,求M有多少个子矩阵上面的数字和恰巧等于a
算法分析:
这道题是Codeforces Round #213 Div 1 Problem A && Div 2 Problem C,赛场上没写对,主要是没分析清楚,有一点想法就迫不及待地提交,结果白白提交了九次。后来以为自己想通了一个小BUG,转天又开始毛毛躁躁……看了数据才发现自己脑残忘了一种情况……教训十分沉重。
首先我们定义一个子矩阵为(x, y, z, t),意思为以矩阵中的点(x, y)为左上角,(z, t)为右下角的子矩形。我们需要通过观察发现对于某个子矩形上的元素和,恰巧等于
\( \sum\limits_{i=x}^{z} s_{i} * \sum\limits_{i=y}^{t} s_{i}\) (这一点很容易证明)。接下来我们要做的就是预处理出来一个部分和\( sum[i] = \sum\limits_{x=1}^{i} s_{x} \),
然后我们就可以用\( n^2 \)的时间求出s上任意一段的部分和。设w[t]为t在所有的部分和中出现的次数(亦即:枚举i和j(i ≤ j),若i到j的部分和为t,++w[t])
那么,我们要求的就是对于a的每个因子q,\( \sum\limits_{q | a} w[q] * w[a / q] \)。
至于接下来……就是几个需要注意的我脑残的地方了
- s的最大长度为4000,每一位的最大值是9,所以w最大只需要到36000,保险起见开到40000。
 - 尽管任何一段的部分和都不会超过36000,但是w[a/q]很可能使数组越界,需要特判
 - 如果a=0,需要进行特殊处理
 
//date 20131119
#include <cstdio>
#include <string>
#include <iostream>
#include <cstring> using namespace std; const int maxn = ;
const int maxa = ; long long a, ans;
string s;
int sum[maxn];
int w1[maxa]; int main()
{
//freopen("matrix.in", "r", stdin);
//freopen("matrix.out", "w", stdout);
cin >> a;
ans = ; //if(a == 0L){printf("0\n"); return 0;} cin >> s;
int l = s.length();
for(int i = ; i <= l; ++i) sum[i] = s[i - ] - '';
for(int i = ; i <= l; ++i)
sum[i] = sum[i - ] + sum[i]; for(int i = ; i <= l; ++i)
for(int j = ; j <= i; ++j)
w1[sum[i] - sum[j - ]]++; if(a > )
for(int i = ; i < maxa; ++i)
{
if(a % (long long)i == )
{
if((a / (long long)i) >= maxa)continue;
ans += (long long)w1[i] * (long long)w1[a / (long long)i];
}
} else{
for(int i = ; i < maxa; ++i)
ans += (long long)w1[] * (long long)w1[i];
ans *= 2L; ans += (long long)w1[] * (long long)w1[];
}
cout << ans << endl;
return ;
}
继续加油!
Codeforces 364A - Matrix的更多相关文章
- 【Codeforces 364A】Matrix
		
[链接] 我是链接,点我呀:) [题意] 让你求出b[i][j]=s[i]*s[j]规则构成的矩阵 的所有子矩阵中子矩阵的和为a的子矩阵的个数 [题解] (x,y,z,t) 会发现它的和就是sum(x ...
 - Codeforces 954C Matrix Walk (思维)
		
题目链接:Matrix Walk 题意:设有一个N×M的矩阵,矩阵每个格子都有从1-n×m的一个特定的数,具体数的排列如图所示.假设一个人每次只能在这个矩阵上的四个方向移动一格(上下左右),给出一条移 ...
 - [codeforces gym Matrix God]随机矩阵乘法
		
题目链接:http://codeforces.com/gym/101341/problem/I 随机真是一个神奇的方法.原本矩阵乘法是n^3的复杂度,但是这个题是让判断两个矩阵是否相等,只需要在两个矩 ...
 - codeforces #364a Cards
		
cf的a题没什么好说到,100的量级,每个人给2张牌,使每个人手中的牌点数相等.保证有一种分配方案. 对每个人,先计算出手中的牌的点数,然后循环两遍拿牌就可以. A. Cards time lim ...
 - CodeForces 313C Ilya and Matrix
		
Ilya and Matrix Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Su ...
 - Codeforces Round #277 (Div. 2) B. OR in Matrix 贪心
		
B. OR in Matrix Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/486/probl ...
 - Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) C. Little Artem and Matrix 模拟
		
C. Little Artem and Matrix 题目连接: http://www.codeforces.com/contest/669/problem/C Description Little ...
 - Codeforces Round #540 (Div. 3) C. Palindromic Matrix 【暴力】
		
任意门:http://codeforces.com/contest/1118/problem/C C. Palindromic Matrix time limit per test 2 seconds ...
 - Educational Codeforces Round 9 F. Magic Matrix 最小生成树
		
F. Magic Matrix 题目连接: http://www.codeforces.com/contest/632/problem/F Description You're given a mat ...
 
随机推荐
- Web开发常见的漏洞
			
SQL注入漏洞 跨站脚本攻击漏洞 登陆后台管理页面 IIS短文件/文件夹漏洞 系统敏感信息泄露
 - android 打开GPS的几种方式
			
1.在讨论打开gps的之前先看下如何检测gps的开关情况: 方式一: boolean gpsEnabled = locationManager.isProviderEnabled(LocationMa ...
 - 从 Typecho 自定义字段的调用代码看去
			
千呼万唤,Typecho 的"自定义字段"功能终于在 0.9 中出来了.然而,多数人还蒙在这样一个鼓里--该怎么在模板调用已经设置好的自定义字段呢?让我们从这里开始说下去: Typ ...
 - easy ui datagrid 动态绑定数据并绑定链接,进行操作
			
①.绑定datagrid,formatter { field: 'ShopId', title: '操作', width: 200, align: 'left', formatter: showSho ...
 - 插入排序(insertion_sort)
			
最简单的排序算法,又称插值排序,原理类似于打扑克牌时把摸到的牌插入手中已有序牌的过程. void insertion_sort(int* A ,int n){ int i,j,key; ;i < ...
 - 【BZOJ 1040】 [ZJOI2008]骑士
			
Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...
 - css3  简单界面动画
			
asdasdasdasda asdasdasdasda
 - 1074: [SCOI2007]折纸origami - BZOJ
			
Description 桌上有一张边界平行于坐标轴的正方形纸片,左下角的坐标为(0,0),右上角的坐标为(100,100).接下来执行n条折纸命令.每条命令用两个不同点P1(x1,y1)和P2(x2, ...
 - 1015: [JSOI2008]星球大战starwar - BZOJ
			
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...
 - Extjs4.2布局——Ext.container.ViewportView
			
先贴出官方文档的关于此布局的描述:“ 一个专门的容器用于可视应用领域(浏览器窗口). Viewport渲染自身到网页的documet body区域, 并自动将自己调整到适合浏览器窗口的大小,在窗口大小 ...