AtCoder - 4167 Equal Cut(2分)

2024-04-01 18:38
文章标签 equal atcoder cut 4167

本文主要是介绍AtCoder - 4167 Equal Cut(2分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://arc100.contest.atcoder.jp/tasks/arc100_b?lang=en

 

二分 ;

因为要切3刀,我们先枚举中间的刀。

然后二分两边的刀,让两边的2部分尽量相等,算一个答案,每次枚举就会得到一个答案。

取最小即可。

 

#include<map>
#include<stack>
#include<queue>
#include<cmath>
#include<string>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long int
#define lson rt<<1,l,m
#define rson rt<<1|1,m+1,r
const int inf = 0x3f3f3f3f;
long long a[222222];
long long pre[222222];
long long roo[222222];
int main()
{int n;while (cin >> n ){for (int i = 0; i < n; i++)cin >> a[i];long long ans = -1;pre[0] = a[0];roo[n - 1] = a[n - 1];for (int i = 1; i < n; i++)pre[i] = pre[i - 1] + a[i];for (int i = n - 2; i >= 0; i--)roo[i] = roo[i + 1] + a[i];for (int i = 1; i <= n - 3; i++){long long ls = pre[i] ;long long rs = roo[i + 1];long long l1, l2, r1, r2;long long lz = lower_bound(pre, pre + i + 1, ls / 2)-pre;if (lz != 0)lz--;l1 = pre[lz];l2 = ls - l1;long long rz = lower_bound(pre, pre + n, ls + rs / 2) - pre;if (rz != i + 1)rz--;r1 = pre[rz] - pre[i];r2 = rs - r1;long long zs = max(l1, max(l2, max(r1, r2)));zs = abs(zs - min(l1, min(l2, min(r1, r2))));if (ans == -1 || ans > zs)ans=zs;l1 = pre[lz + 1];l2 = ls - l1;r1 = pre[rz] - pre[i];r2 = rs - r1;zs = max(l1, max(l2, max(r1, r2)));zs = abs(zs - min(l1, min(l2, min(r1, r2))));if (ans == -1 || ans > zs)ans = zs;l1 = pre[lz + 1];l2 = ls - l1;r1 = pre[rz+1] - pre[i];r2 = rs - r1;zs = max(l1, max(l2, max(r1, r2)));zs = abs(zs - min(l1, min(l2, min(r1, r2))));if (ans == -1 || ans > zs)ans = zs;l1 = pre[lz];l2 = ls - l1;r1 = pre[rz+1] - pre[i];r2 = rs - r1;zs = max(l1, max(l2, max(r1, r2)));zs = abs(zs - min(l1, min(l2, min(r1, r2))));if (ans == -1 || ans > zs)ans = zs;}cout << ans << endl;}return 0;
}

 

这篇关于AtCoder - 4167 Equal Cut(2分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/867862

相关文章

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

AtCoder Beginner Contest 369 D - Bonus EXP 动态规划

原题链接: https://atcoder.jp/contests/abc369/tasks/abc369_d 思路:   这道题为什么要用动态规划呢,其实,对于第i个怪物,我们有打与不打两种处理方式,而对于打,我们是获得两倍的经验值,还是一倍的经验值,与我们打了奇数只怪物还是打了偶数只怪物有关了,因此我们定义dp[i][0] 为前i只怪物总共打了偶数次,dp[i][1] 为前i只怪物总

Shell编程:文本处理器(cut、split、paste、eval 命令)

文章目录 文本处理器 2cut 命令-快速裁剪语法格式常用选项示例 split 命令-文件拆分语法格式常用选项示例 paste 命令-文件合并语法格式常用选项示例 eval 命令-变量扫描器工作原理示例 文本处理器 2 本章讲解 grep、sort、uniq、tr、cut、split、paste 命令等。这些文本处理器通常用于数据过滤、转换、清理、格式化和提取等操作,

Pandas-高级处理(八):数据离散化【pandas.cut:根据指定分界点对连续数据进行分箱处理】【pandas.qcut:指定箱子的数量对连续数据进行等宽分箱处理】【get_dummies】

Python实现连续数据的离散化处理主要基于两个函数:pandas.cut和pandas.qcut,pandas.cut根据指定分界点对连续数据进行分箱处理,pandas.qcut可以指定箱子的数量对连续数据进行等宽分箱处理(注意:所谓等宽指的是每个箱子中的数据量是相同的) 应用cut、qcut实现数据的区间分组应用get_dummies实现数据的one-hot编码 数据离散化 可以用来减少

每日一shell之字符处理grep sort uniq cut tr paste split

grep搜索文本 grep -[icvn]‘匹配字符’ 文件名 -i不区分大小写 -c统计匹配行数 -n输出行号 -v反向匹配(就是不包含匹配字符的行) 需要注意的一点是有了-c这个选项输出只有行数,是不会输出内容的 sort排序 sort默认是按字符排序的 sort -[ntkr] 文件名 -n用数字排序 -t指定分割符 -k第几列 -r反向排序 这里就是按字

题解AtCoder ABC 358 F Easiest Maze

一道模拟题。 思路 最短的路线是直接竖着走下来,经过 n n n 个格子,所以 k k k 最小是 n n n。如果想要延长路线,可以采用九转大肠的形状,就像这样: 可以发现,每次向左走之后都必须走回来,所以每次新经过的格子数是偶数,得到 k − n k-n k−n 是偶数才有可行的方案。 首先,把整张图表的初始状态设为如下形式(即每个格点都是独立的): +++++S++o|o|o

AtCoder Beginner Contest 369 ABCDE

背景 无 A题:369  思路 假设A<=B 分类讨论,有如下两种情况         1.A==B,情况唯一,另外一个数只能取A         2.A<B,首先我们可以以B-A为公差d构造,另外一个数可以取A-d或者B+d。(然后接着考虑放在A和B中间的情况,样例中给了,只要B-A为偶数即可) 代码 inline void solve() {int a, b; cin >>

AtCoder Beginner Contest 369 A~E

封面原图 画师かにょこ AtCoder Beginner Contest 369 我愿称之为等差数列场 A - 369 题意 给两个数,问能和他们构成等差数列的数有多少个 代码 #include <bits/stdc++.h>#define mod 998244353using namespace std;typedef long long ll;typed

tr,cut,diff(数据处理

tr 命令 功能: tr 命令用于转换或删除文件中的字符。 语法: 格式: tr [-cdst][--help][--version][第一字符集][第二字符集] tr [OPTION]…SET1[SET2] 标识符: -d:删除指定的字符。-s:压缩重复的字符为一个字符。 具体应用: # 1. 将文件内容全部转换为大写cat 1.txt | tr a-z A-Zca

AtCoder Beginner Contest 366(D~E题解)

闲来无事去vp了一下之前放假没打的比赛,感觉需要总结的也就这两题吧,a,c都是水题,b只不过是实现有一点难,并不是很难写,d是一个需要自己推的三维前缀和,e也是一种前缀和,我当时没想到,看了大犇的代码才知道还能这么做 D - Cuboid Sum Query 题意:给你一个三维数组,然后给你q次询问,每次询问有一个起始位置和终止位置,然后问你这个的三维前缀和是什么 思路:用容斥原理推出三