Codeforces 263E
Codeforces 263E
原题
题目描述:一个\(n \times m\)的矩阵,每格有一个数,给出一个整数\(k\),定义函数\(f(x, y)\):
\]
求使\(f(x, y)\)最大的一个二元对\((x, y)\)
solution
我表示只会暴力部分和
1、\(\sum_{p=1}^{i} a_{i-p+1, j}\)
2、\(\sum_{p=1}^{k} a_{i-p+1, j}*(k-p+1)\)
3、\(\sum_{p=1}^{k} a_{i-p+1, j+p-1}\)
4、以图为例,\(k=3, (3, 4)\)为红色圈住的部分每个数*1
5、以图为例, \(k=3, (3, 4)\) 为 $ ( ( 4 + 6 + 7 ) \times 1+ ( 2 + 6 ) \times 2+ 8 \times 3) $

然后旋转三次, 每次算的时候减去最高那列(图为减去第4列),加起来就是答案了。
AC的人中好像有更神的算法,就是把图斜着看,那就是求正方形的和了。
code
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <complex>
#include <set>
#include <map>
#include <stack>
using namespace std;
const int maxn=1010;
typedef long long LL;
int n, m, lim;
int a[maxn][maxn], tmpa[maxn][maxn];
LL f[maxn][maxn], tmpf[maxn][maxn];
LL sum[maxn][maxn][7];
void init()
{
scanf("%d%d%d", &n ,&m, &lim);
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
scanf("%d", &a[i][j]);
}
void prepare()
{
int fi=max(n, m);
for (int i=1; i<=fi; ++i)
for (int j=1; j<=fi; ++j)
for (int k=1; k<=5; ++k)
sum[i][j][k]=0;
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
{
//row and once
sum[i][j][1]=sum[i-1][j][1]+a[i][j];
//row and in order
LL up=(i-1>=lim? sum[i-1-lim][j][1]:0);
sum[i][j][2]=sum[i-1][j][2]-(sum[i-1][j][1]-up)+LL(lim)*a[i][j];
//bevel
sum[i][j][3]=sum[i-1][j+1][3]+a[i][j];
//triangle and once
up=(i>=lim? sum[i-lim][j][3]:0);
LL L;
if (j-1>=lim) L=sum[i][j-lim][3];
else
L=(i-(lim-(j-1))>0? sum[i-(lim-(j-1))][1][3]:0);
sum[i][j][4]=sum[i][j-1][4]-(L-up)+sum[i][j][1]-(i>=lim? sum[i-lim][j][1]:0);
//triangle and in order
sum[i][j][5]=sum[i][j-1][5]-sum[i][j-1][4]+sum[i][j][2];
}
}
void turn()
{
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
tmpa[i][j]=a[i][j];
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
a[m-j+1][i]=tmpa[i][j];
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
tmpf[i][j]=f[i][j];
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
f[m-j+1][i]=tmpf[i][j];
swap(n, m);
}
void solve()
{
for (int i=1; i<=4; ++i)
{
prepare();
for (int j=1; j<=n; ++j)
for (int k=1; k<=m; ++k)
f[j][k]+=sum[j][k][5]-sum[j][k][2];
turn();
}
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
f[i][j]+=a[i][j]*lim;
int x=0, y=0;
LL ans=-1;
for (int i=lim; i<=n-lim+1; ++i)
for (int j=lim; j<=m-lim+1; ++j)
if (f[i][j]>ans)
{
x=i; y=j;
ans=f[i][j];
}
printf("%d %d\n", x, y);
}
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
init();
solve();
return 0;
}
Codeforces 263E的更多相关文章
- CodeForces 263E Rhombus
洛谷题目页面传送门 & CodeForces题目页面传送门 给定一个$n$行$m$列的矩阵,第$i$行$j$列为$a_{i,j}$,以及一个常数$s\in\left[1,\left\lceil ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
- CodeForces - 696B Puzzles
http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
随机推荐
- linux下mysql忘记root密码怎么办
Linux下MySQL忘记root密码怎么办? Linux下MySQL忘记root密码怎么办? 1. 修改MySQL配置文件 默认MySQL的配置文件为/etc/my.cnf,在[mysqld]下面添 ...
- 转 jquery插件--241个jquery插件—jquery插件大全
241个jquery插件—jquery插件大全 jquery插件jqueryautocompleteajaxjavascriptcoldfusion jQuery由美国人John Resig创建,至今 ...
- C语言函数qsort的使用方法
qsort函数stdlib.h文件中,函数原型为 void qsort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,co ...
- _OBJC_CLASS_$_ errors 错误解决办法
步骤如下图: 1. 点击 Manage Schemes 2. Shared打对勾即可
- C语言 —— 括号配对问题(不使用栈)
最近在南阳理工的OJ上刷题,看到一个有点意思的题目 网上的答案大多都使用了栈,可惜我还没有学习数据结构,所以只能用简单的方法来解决 题目的链接在这 http://acm.nyist.net/Judge ...
- Android仿微信界面--使用Fragment实现(慕课网笔记)
1 效果图 这里我们没有实现滑动切换view的功能 2 具体实现: 2.1 布局文件:top.xml, bottom.xml,tab01.xml,tab02.xml,tab03.xml,tab04. ...
- Java_SSH项目主要步骤记录
建立Spring-Struts-Hibernate的步骤整理 1. 建立web project 2. 建立hernate, action, service包 3. 右击项目,add myeclipse ...
- 克拉夫斯曼高端定制 刘霞---【YBC中国国际青年创业计划】
克拉夫斯曼高端定制 刘霞---[YBC中国国际青年创业计划] 克拉夫斯曼高端定制 刘霞
- Spring、整合Spring+JDBC
首先引入Spring包和JDBC所使用到的包: 配置beans.xml步骤: 1.配置dataSource的属性 2.将DataSource交给DataSourceTransactionManager ...
- php将文件夹打包成zip文件
function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while(($filenam ...