首页 > 其他分享 >C221110C. SolarPea与网格

C221110C. SolarPea与网格

时间:2024-10-11 21:59:44浏览次数:9  
标签:gt int max 网格 long cin C221110C SolarPea freopen

C221110C. SolarPea与网格

是怎么想到dp定义的?

思考下面这个情景:

  • 如果一个人在 \(x\), 另一个人在 \(y \ (x \lt y)\), 那么在 \(x\) 的人会把 \(x \lt i \lt y\) 的所有 \(i\) 全走一遍,走完之后 \(x + 1 = y\)。

对于这个情景,我们想到记 \(f[i]\) 表示一个人在 \(i - 1\),一个人在 \(i\) ,跳到终点后的max(前一个人得分 减去 后一个人得分)。

我们在转移时,先暂时忽略1,2两个点的贡献。最后加一个 \(a[1] - a[2]\) 就行。

答案: \(f[2]\)。

初始化:\(f[n] = 0\)。

\(n\) 是最后一步。因此 dp顺序 是\(n \sim i\) 。有转移:

\[f[i] = \max_{j \gt i} a[j] - (s[i] - s[j - 1]) - f[j] \]

解释一下:由于每次是前一个人先跳,所以他肯定想拿远处很大的一个数(现在不拿就会被对手拿),然后让对手把这一段全部拿掉。最后再把上一步的贡献加上,注意两个人的相对位置翻转了,所以是 \(- f[j]\) 而不是 \(+ f[j]\)。

这是最朴素的式子。

答案就是 \(f[2]\)。

考虑简化这个式子

我也不知道是怎么注意到可以这么优化的。。。(注意力惊人)

考虑把 \(j \gt i\) 的所有 \(j\) 分成两类:

  • \(j = i + 1\), 则 \(f[i] = a[i + 1] - s[i] + s[i] - f[i + 1] = a[i + 1] - f[i + 1]\)。

  • \(j > i + 1\), 则 \(f[i] = \max_{j \gt i + 1} a[j] - s[j - 1] + s[i] - f[j]\)。

    ​ 又因为 \(f[i + 1] = \max_{j > i + 1} a[j] - s[j - 1] + s[i + 1] - f[j]\)。

    两式相减,则 $f[i + 1] - f[i] = s[i + 1] - s[i] = a[i + 1] $。

    ​ 则 \(f[i] = f[i + 1] - a[i + 1]\)。

综上:\(f[i] = |f[i+ 1] - a[i + 1]|\)。

考虑利用绝对值的一些性质

记 \(g[i]\) 表示当 \(a[n] = i\) 时,\(f_2 = g[i]\) 。

结合上面绝对值的式子,可以得到:

\[|\ |\ |\ |f[n] - a[n]\ | - a[n - 1]\ | - a[n - 2] - \cdots| - a[3]\ | = g[i] = f[2] \]

每增加一个绝对值,对 \(g[i]\) 的影响就是先整体向右平移 \(a[n]\),然后 对于 \(i < a[n]\), 按 \(y\) 轴对称一下。

发现不是很好直接做。考虑用 \(deque\) 维护,每次在把 \(<a[i]\) 的一段元素再插入队首即可。

值域只有 \(10^6\), 可以直接维护。

如果 \(x\) 极大,那直接一步调到最后就可以(因为肯定最优)。

时间复杂度 \(O(\sum_a +q)\)。

/*
Think twice, code once
Please check the followings:
1.Array memory
2.Testing sentence
3.if_else condition
4.freopen
5.long long
*/
#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=(r);++i)
#define G(i,r,l) for(int i(r);i>=(l);--i)
using namespace std;
using ll = long long;
const int N = 2e5 + 5;
const int inf = 1e9;
list<int> g;
int n, q, cnt = 0;
int a[N], s[N], res[N  * 10];
signed main(){
//	freopen("test.in","r",stdin);
//	freopen("game.in","r",stdin);
//	freopen("game.out","w",stdout);
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> n;
	F(i, 1, n - 1) cin >> a[i], s[i] = s[i - 1] + a[i];
	F(i, 0, s[n - 1] - s[2]) g.push_back(i);
	F(i, 3, n - 1){
		auto it = g.begin();
		F(j, 1, a[i]) ++it, g.push_front(*it);//平移指针, 就相当于是平移图像了
	}
	for(auto x : g) res[++ cnt] = x;
	cin >> q;
	int x;
	while(q --){
		cin >> x;
		if(x + 1 <= cnt) cout << res[x + 1] + a[1] - a[2] << '\n';
		else cout << (x - s[n - 1] + s[2]) + a[1] - a[2] << '\n';
	}
	return 0;
}

标签:gt,int,max,网格,long,cin,C221110C,SolarPea,freopen
From: https://www.cnblogs.com/superl61/p/18459454

相关文章

  • 浅谈云原生--微服务、CICD、Serverless、服务网格
    往期推荐 浅学React和JSX-CSDN博客一文搞懂大数据流式计算引擎Flink【万字详解,史上最全】-CSDN博客一文入门大数据准流式计算引擎Spark【万字详解,全网最新】_大数据spark-CSDN博客目录1.云原生概念和特点2.常见云模式3.云对外提供服务的架构模式3.1IaaS(Infrast......
  • [CSP-S 2019 江西] 网格图
    算法暴力建图直接跑Kruskal,显然能通过\(64pts\)的点正解分析Kruskal的复杂度发现比较边权非常的浪费,很显然是不必要的并查集求环路也浪费了网格图的性质考虑优化把每一条边看做一个整体,整体比较只需要\(O((n+m)\log(n+m))\)问题是这样比较之后正确性如......
  • [Python手撕]网格中的最短路径(可以有k次破墙的机会)
    classSolution:defshortestPath(self,grid:List[List[int]],k:int)->int:n=len(grid)m=len(grid[0])ifm==n==1:return0direction=[[0,1],[-1,0],[1,0],[0,-1]]visited=[[[......
  • 探索 Kubernetes 服务网格:Istio 实战指南
    ......
  • 【pyVista】在三维模型中的网格属性
    一,什么是属性?        属性是存在于一个网格。在PyVista中,我们同时使用点数据和单元数据,并且允许轻松访问数据字典以保存属性数组它们位于网格的所有点或所有单元上。点数据点数据是指值数组(标量、向量等),这些值Live在网格的每个点上。属性数组中的每个元素对......
  • ArcGIS创建渔网:得到指定大小的网格矢量
      本文介绍在ArcMap软件中,通过“CreateFishnet”工具创建渔网,从而获得指定大小的矢量格网数据的方法。  首先,我们在创建渔网前,需要指定渔网覆盖的范围。这里我们就以四川省为例,在这一范围内创建渔网;其中,四川省的矢量范围如下图所示。  在ArcMap软件中,我们依次选择“Toolb......
  • DevExpress中文教程:如何将WinForms数据网格连接到ASP. NET Core WebAPI服务?
    日前DevExpress官方发布了DevExpressWinForms的后续版本——将.NET桌面客户端连接到安全后端WebAPI服务(EFCorewithOData),在本文中我们将进一步演示如何使用一个更简单的服务来设置DevExpressWinForms数据网格。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms......
  • 【CSS in Depth 2 精译_033】5.4 Grid 网格布局的显示网格与隐式网格(中)
    当前内容所在位置(可进入专栏查看其他译好的章节内容)第一章层叠、优先级与继承(已完结)1.1层叠1.2继承1.3特殊值1.4简写属性1.5CSS渐进式增强技术1.6本章小结第二章相对单位(已完结)2.1相对单位的威力2.2em与rem2.3告别像素思维2.4视口的相对单位2.5......
  • 前端必知必会-CSS Grid网格
    文章目录CSS网格布局模块网格布局网格元素Display属性网格列网格行网格间隙网格线所有CSS网格属性总结CSS网格布局模块网格布局CSS网格布局模块提供基于网格的布局系统,包含行和列,可让您更轻松地设计网页,而无需使用浮动和定位。网格元素网格布局由一个父元......
  • 【CSS in Depth 2 精译_032】5.4 Grid 网格布局的显示网格与隐式网格(上)
    当前内容所在位置(可进入专栏查看其他译好的章节内容)第一章层叠、优先级与继承(已完结)1.1层叠1.2继承1.3特殊值1.4简写属性1.5CSS渐进式增强技术1.6本章小结第二章相对单位(已完结)2.1相对单位的威力2.2em与rem2.3告别像素思维2.4视口的相对单位2.5......