codeforces 1016C - Vasya And The Mushrooms 【构造 + 思维】
题目链接:戳这里
题意:从(1,1)出发,一遍把格子走完,每个格子只能走一次。问怎么走总和最大。
解题思路:画图可知,总共就3种走法的混合。
dw: 样例1的走法
up: 样例1反过来的走法
lp: 样例2的走法
两种组合情况:
先lp,后dw或up
我的思路是暴力预处理。把dw,up,lp三种走法先预处理出来,然后再看两种组合情况的拐点在哪,遍历拐点求出最大的值即可。虽然代码很长,但大多数都是重复代码,思路还是很简单的。
附ac代码:
1 #include <cstdio>
2 #include <cstring>
3 #include <string>
4 #include <algorithm>
5 #include <cmath>
6 #include <vector>
7 #include <queue>
8 #include <iostream>
9 using namespace std;
10 typedef long long ll;
11 const int maxn = 1e6 + 10;
12 ll nu[3][maxn];
13 ll dw[3][maxn];
14 ll up[3][maxn];
15 ll lp[3][maxn];
16 ll sumup[3][maxn];//单纯的前缀和,用于处理混合情况时up里的时间
17 ll sumdw[3][maxn];//如上
18 int dx[6] = {1, 0,-1, 0};
19 int dy[6] = {0, 1, 0, 1};
20 int main(){
21 int n;
22 scanf("%d", &n);
23 for(int i = 1; i <= 2; ++i)
24 {
25 for(int j = 1; j <= n; ++j)
26 {
27 scanf("%lld", &nu[i][j]);
28 }
29 }
30 for(int i = 1; i <= n; ++i)
31 {
32 up[2][i] += nu[2][i] * i + up[2][i - 1];
33 sumup[2][i] += nu[2][i] + sumup[2][i - 1];
34 }
35 up[1][n] += up[2][n];
36 sumup[1][n] += sumup[2][n];
37 for(int i = n ; i >= 2; --i)
38 {
39 up[1][i] += nu[1][i] * (2 * n - i + 1) + up[1][i + 1];
40 sumup[1][i] += nu[1][i] + sumup[1][i + 1];
41 }
42 for(int i = 2; i <= n; ++i)
43 {
44 dw[1][i] += nu[1][i] * (i - 1) + dw[1][i - 1];
45 sumdw[1][i] += nu[1][i] + sumdw[1][i - 1];
46 }
47 dw[2][n] += dw[1][n];
48 sumdw[2][n] += sumdw[1][n];
49 for(int i = n; i >= 1; --i)
50 {
51 dw[2][i] += nu[2][i] * (2 * n - i) + dw[2][i + 1];
52 sumdw[2][i] += nu[2][i] + sumdw[2][i + 1];
53 }
54 int u = 1, v = 1;
55 int cnt = 0;
56 while(u <= 2 && v <= n)
57 {
58 for(int i = 0; i < 4; ++i)
59 {
60 ++cnt;
61 u += dx[i];
62 v += dy[i];
63 if(u > 2 || v > n) break;
64 lp[u][v] = lp[u - dx[i]][v - dy[i]] + nu[u][v] * cnt;
65 }
66 }
67 ll ans = 0;
68 for(int i = 1; i <= n; i += 2)
69 {
70 ans = max(ans, lp[1][i] + (i / 2 * 2) * (sumdw[2][i] - sumdw[1][i]) + dw[2][i] - dw[1][i]);//临界值不清楚的同学自己画图跑跑就知道啦
71 }
72 for(int i = 2; i <= n; i +=2)
73 {
74 ans = max(ans, lp[2][i] + (i - 2) * (sumup[1][i] - sumup[2][i]) + up[1][i] - up[2][i]);
75 }
76 printf("%lld\n", ans);
77 return 0;
78 }
codeforces 1016C - Vasya And The Mushrooms 【构造 + 思维】的更多相关文章
- CodeForces - 1016C Vasya And The Mushrooms
题面在这里! 好久没有体会这种A题的快感了23333 一开始看错了,以为权值是从1开始的,不过这样不要紧,最后把算的答案减去两行数的和就是正确的答案了. 然后发现位于一个角上的时候,我们其实只有两种选 ...
- codeforces C. Vasya And The Mushrooms (思维+模拟)
题意:给定一个2*n的矩形方格,每个格子有一个权值,从(0,0)开始出发,要求遍历完整个网格(不能重复走一个格子),求最大权值和,(权值和是按照step*w累加,step步数从0开始). 转载: 题解 ...
- Codeforces Round #546 (Div. 2) D 贪心 + 思维
https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...
- CodeForces - 837E - Vasya's Function | Educational Codeforces Round 26
/* CodeForces - 837E - Vasya's Function [ 数论 ] | Educational Codeforces Round 26 题意: f(a, 0) = 0; f( ...
- Vasya And The Mushrooms CodeForces - 1016C (前缀和模拟)
大意: 给定2*n的矩阵, 每个格子有权值, 走到一个格子的贡献为之前走的步数*权值, 每个格子只能走一次, 求走完所有格子最大贡献. 沙茶模拟打了一个小时总算打出来了 #include <io ...
- Educational Codeforces Round 48 (Rated for Div. 2) D 1016D Vasya And The Matrix (构造)
D. Vasya And The Matrix time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- codeforces1016 D. Vasya And The Matrix(思维+神奇构造)
D. Vasya And The Matrix time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- Codeforces 755E:PolandBall and White-Red graph(构造+思维)
http://codeforces.com/contest/755/problem/E 题意:给出n个点和一个距离d,让你在这个n个点的图里面构造一个子图,使得这个子图的直径和补图的直径的较小值为d, ...
- codeforces 454 E. Little Pony and Summer Sun Celebration(构造+思维)
题目链接:http://codeforces.com/contest/454/problem/E 题意:给出n个点和m条边,要求每一个点要走指定的奇数次或者是偶数次. 构造出一种走法. 题解:可能一开 ...
随机推荐
- 1 分钟上手,在容器中运行 Visual Studio Code
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers 这个插件允许我们在容器中运 ...
- MySQL简介及安装 mysql Ver 14.14 Distrib 5.7.28
1.MySQL简介 1.数据库产品演变 第一代数据库架构: RDBMS 关系型数据库时代 : 合的时代 代表产品 :Oracle .MSSQL .MySQL.SQL server 第二代数据库架构:拆 ...
- python 字典(formkey 建立 取值 赋值 删除 )
formkey快速建立空字典 result = {}.fromkeys(['name','age','job'],None) print(result) #往字典里添加元素 result. ...
- Turbo Boyer-Moore algorithm
MySQL :: MySQL 8.0 Reference Manual :: 8.3.9 Comparison of B-Tree and Hash Indexes https://dev.mysql ...
- 为了更好的多线程性能,在对象创建或者更新时,若数据大于2047字节则 Python 的 GIL 会被释放。 执行计算密集型任务如压缩或哈希时释放 GIL
hashlib - Secure hashes and message digests - Python 3.8.3 documentation https://docs.python.org/3.8 ...
- shiro的授权与认证
shiro的授权与认证 package com.cy.pj.common.aspect;import java.lang.reflect.Method;import java.util.Arrays; ...
- 在IDEA中用三个jar包链接MongoDB数据库——实现增删改查
安装Robo 3T连接MongoDB数据库教程:https://blog.csdn.net/baidu_39298625/article/details/98845789 使用Robo 3T操作Mon ...
- 拓扑排序(topo sort)之 最大食物链计数( 洛谷P4017)
前言: 复习复习拓扑排序,自己把自己弄没了/kk 题目传送门 简化题意: 在一个DAG中,求从所有入度为0的点到所有出度为0的点路径的条数 md理解错题意把自己卡了半天,生物学的好的就可以直接理解为求 ...
- BootstrapValidator验证规则、BootStrap表格:列参数
BootstrapValidator验证规则 需引用组件 <script src="~/Scripts/jquery-1.10.2.js"></script> ...
- scanf()函数释疑(word找的,没源地址了)
scanf()函数释疑(上) 一.序言 scanf()函数的控制串的使用 例1. #include "stdio.h" int main(void) { int a,b,c; sc ...