传送门

C - Linear Approximation

题意:

\[\sum_{i=1}^nabs(A_i-(b+i))
\]

\(A_i,b\)给出。

思路:

将括号拆开,变为\(A_i-i-b\),所以将所有的\(A_i\)减去\(i\),然后就是一个经典问题了。

Code
#include <bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define sz(x) (int)(x).size()
//#define Local
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 2e5 + 5; int n;
int a[N]; void run() {
for(int i = 1; i <= n; i++) cin >> a[i], a[i] -= i;
sort(a + 1, a + n + 1);
int p = a[(n + 1) / 2];
ll ans = 0;
for(int i = 1; i <= n; i++) {
ans += abs(p - a[i]);
}
cout << ans << '\n';
} int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
#ifdef Local
freopen("../input.in", "r", stdin);
freopen("../output.out", "w", stdout);
#endif
while(cin >> n) run();
return 0;
}

D - Equal Cut

题意:

给出一个序列\(a\),长度为\(n,n\leq 2\cdot 10^5\)。现在要切三刀将这个序列分为四段,问最终每段和的最大值减去最小值最小为多少。

思路:

  • 因为只会切三刀,可以考虑单独枚举一刀,然后考虑其它两刀;
  • 那么就考虑枚举中间的那一刀,然后想怎么处理两边的划分。
  • 设左边的两段和为\(L_1,L_2\),右边的两段和为\(R_1,R_2\),那么当\(L_1,L_2\)以及\(R_1,R_2\)的差都最小时,答案最优。
  • 简略证明如下:
  • 左端和为\(L\),右端和为\(R\),那么不妨\(L_1=\frac{L}{2}+t,L2=\frac{L}{2}-t,R_1=\frac{R}{2}+k,R_2=\frac{R}{2}-k\),显然\(MAX=max(L_1,R_1),MIN=min(L_2,R_2)\),那么让\(t,k\)尽量小肯定最优。

其实证明也可以分情况讨论,也就只有两种情况,只是在直觉方面不好感受。。。但这样来想更为自然= =所以矛盾啊QAQ

Code
#include <bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define sz(x) (int)(x).size()
//#define Local
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 2e5 + 5; int n;
int a[N];
ll sum[N]; ll Get(int l, int r, int m) {
return abs(sum[r] - sum[m] - sum[m] + sum[l - 1]);
} void run() {
for(int i = 1; i <= n; i++) {
cin >> a[i];
sum[i] = sum[i - 1] + a[i];
}
int j = 1, k = 3;
ll ans = 1e18;
for(int i = 2; i <= n - 1; i++) {
while(j < i - 1 && Get(1, i, j) > Get(1, i, j + 1)) ++j;
while(k < n - 1 && Get(i + 1, n, k) > Get(i + 1, n, k + 1)) ++k;
ll mx = max(sum[i] - sum[j], max(sum[j], max(sum[n] - sum[k], sum[k] - sum[i])));
ll mn = min(sum[i] - sum[j], min(sum[j], min(sum[n] - sum[k], sum[k] - sum[i])));
// cout << j << ' ' << i << ' ' << k << '\n';
ans = min(ans, mx - mn);
}
cout << ans << '\n';
} int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
#ifdef Local
freopen("../input.in", "r", stdin);
freopen("../output.out", "w", stdout);
#endif
while(cin >> n) run();
return 0;
}

E - Or Plus Max

可以参见:传送门

转换的思路还是挺巧妙的。

F - Colorful Sequences

太菜了不会啊。。。

AtCoder Regular Contest 100的更多相关文章

  1. AtCoder Regular Contest 100 (ARC100) E - Or Plus Max 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/9251448.html 题目传送门 - ARC100E 题意 给定一个正整数 $n(n\leq 18)$. 然后 ...

  2. AtCoder Regular Contest 100 (ARC100) D - Equal Cut 二分

    原文链接https://www.cnblogs.com/zhouzhendong/p/9251420.html 题目传送门 - ARC100D 题意 给你一个长度为 $n$ 的数列,请切 $3$ 刀, ...

  3. AtCoder Regular Contest 100 Equal Cut

    Equal Cut 思路: 枚举中间那个分界点,然后两边找使得切割后差值最小的点,这个可以用双指针 代码: #include<bits/stdc++.h> using namespace ...

  4. AtCoder Regular Contest 100 E - Or Plus Max

    一道很好的dp题 dp[K]存的是 i满足二进制1属于K二进制1位置 最大的两个Ai 这样dp[K]统计的两个数肯定满足(i | j) <= K 然后不断做 update(dp[i | (1&l ...

  5. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

  6. AtCoder Regular Contest 102

    AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...

  7. AtCoder Regular Contest 097

    AtCoder Regular Contest 097 C - K-th Substring 题意: 求一个长度小于等于5000的字符串的第K小子串,相同子串算一个. K<=5. 分析: 一眼看 ...

  8. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  9. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

随机推荐

  1. WPF 3D Cube及点击交互

    在WPF中构建一个简单的立方体比较容易实现,可参考资料也比较众多.比较麻烦的是处理点击交互. 我在WPF中用两种方式实现了3DCube,效果图如下: 方式一: 最常见的3D内容构建模式,结构如下图. ...

  2. SSH框架之Spring+Struts2+Hibernate整合篇

    回顾 -Hibernate框架 ORM: 对象关系映射.把数据库表和JavaBean通过映射的配置文件映射起来, 操作JavaBean对象,通过映射的配置文件生成SQL语句,自动执行.操作数据库. 1 ...

  3. Javascript获取元素的xpath

    //获取xpath function readXPath(element) { if (element.id !== "") {//判断id属性,如果这个元素有id,则显 示//* ...

  4. ionic项目使用Google FCM插件和Google maps插件打包android报错冲突问题

    这段时间在调FCM推送服务的插件 ,原本以为去年调通过,应该很容易,没想到还是出问题了.现将问题及解决方法整理如下,仅供参考: 先看打包报错截图:         详细报错信息:Please fix ...

  5. Sunset: Vulnhub Walkthrough

    主机扫描: ╰─ nmap -p1-65535 -sV -A 10.10.202.147 PORT STATE SERVICE VERSION21/tcp open ftp pyftpdlib 1.5 ...

  6. 腾讯云大学 x CODING | 当 DevOps 邂逅云原生

    2019 年经济减速的阴云笼罩了所有行业,势如破竹的发展势头被打破,小微创新型企业生存艰难.越来越多的企业更加关注客户和业务之间的交付价值,精益化公司运营,降低成本,驱动业务发展.是否要拥抱云原生?开 ...

  7. partition by 与ROW_NUMBER()函数使用详解

    SQL Server数据库partition by 与ROW_NUMBER()函数使用详解 关于SQL的partition by 字段的一些用法心得 先看例子: if object_id('TESTD ...

  8. 如何在Mac上使用Netstat命令

    macOS上的netstat命令是一个终端命令,用于显示有关Mac网络通信的详细信息.网络通信包括Mac通过所有端口和所有应用程序与外界进行交流的所有方式.掌握netstat可以帮助您了解计算机之间的 ...

  9. 数组中重复的数字(剑指offer_3)

    在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次.请找出数组中任意一个重复的数字. Input: {2,3,1,0 ...

  10. 字典树(Trie)详解

    详解字典树(Trie) 本篇随笔简单讲解一下信息学奥林匹克竞赛中的较为常用的数据结构--字典树.字典树也叫Trie树.前缀树.顾名思义,它是一种针对字符串进行维护的数据结构.并且,它的用途超级广泛.建 ...