我开始看心灵鸡汤了……

每当在书中读及那些卑微的努力,都觉得感动且受震撼。也许每个人在发出属于自己的光芒之前,都经历了无数的煎熬,漫长的黑夜,无尽的孤独,甚至不断的嘲讽和否定,但好在那些踮脚的少年,最后都得到了自己想要的一切。

某乎

学习信息竞赛对我来说,是一份美妙而充实的身心体验。随着一份份代码的 AC,雀跃的心灵是决不同于其他方面的。文化课的学习生活对我是一种美食的享受,而信息竞赛则更像是一次海天盛宴,让人充满前进和追求远方的动力与勇气。学习算法是快乐的,因为人本不是为使自己更加疲惫而制造工具的,而是简化工序,使用各种工具让自己的生活更加简单便捷。算法竞赛是追求化繁为简的,是追求高效和正确的,这也正是对待生活的良好态度。几年下来,随着知识和阅历的增加,生活也变得更加充满意义,对时间的把握能力更强了,这是信息竞赛带给我的人生财富。愿我在这条路上走得再远一些,以更好的姿态追求无尽的前方。

今明两天再总结总结,总结经验和教训,把简单题再扎实一下。不要好高骛远了,毕竟我学了不少复杂的知识 NOIP 都用不上。(除了模拟退火真贪心啊……)

Contest

已经写了好几天水题赛了,但是还是不长进啊……

A. ssoj2997 删除(removal)

开始给你 \(N\) 个元素的数组(下标从 1 开始),数组里的数是 \(1,2,3,…,N\),然后执行 \(D\) 次删除操作。每次删除操作给一个区间 \([lo, hi]\),要求删除下标位置从 \(lo\) 到 \(hi\) 的数,数组里的数据个数会减少 \(hi-lo+1\) 个。

例如,\(N=8\),第 1 次删除操作区间是 \([3,4]\),结果为 “\(1,2,5,6,7,8\)”;第 2 次删除操作区间是 \([4,5]\),结果为 “\(1,2,5,8\)”。

最后,输出第 \(M\) 位的数字是什么。如果剩余的数不够 \(M\) 个,输出 \(-1\)。

\(1\le M\le N\le 2\times10^9,1\le D\le 50\)。

显然,正向做题不可行,因为操作区间太大。

考虑逆向。对于最后问的第 \(M\) 个数,它前面后面有不少数已被删去,不过后面的数对答案没有贡献,前面的删除区间不可能覆盖到 \(M\)(想一想,为什么?)。

每一次 \(M\) 前面的区间被删除,\(M\) 的位置相当于向前移动。所以逆向把 \(M\) 前的区间还原回去就可以了。

#include <cstdio>

int T, n, m, d, l[53], r[53];

int main() {
scanf("%d", &T);
while (T--) {
scanf("%d%d%d", &n, &m, &d);
for (int i=1; i<=d; ++i) scanf("%d-%d", &l[i], &r[i]);
for (int i=d; i; --i) if (l[i]<=m) m+=r[i]-l[i]+1;
printf("%d\n", m>n?-1:m);
}
return 0;
}

B. ssoj2998 jyt 的崇拜者(sequence)

有 \(n\) 个元素的整数序列 \(A\),要求修改成单调不减的序列 \(B\),代价 \(\max\{|A_i-B_i|,1≤i≤n\}\)。求最小代价。

之前做过,保证 \(B_i\) 一定大于等于 \(A_i\) 即可。

#include <cstdio>
#include <algorithm>
using namespace std; int n, A, B, ans; int main() {
scanf("%d", &n);
for (int i=1; i<=n; ++i) scanf("%d", &A),
B=max(B, A), ans=max(ans, (B-A+1)>>1);
printf("%d\n", ans);
return 0;
}

考场上为什么 WA 了呢?!!!考场上想太多了!

是啊,水题就不要多想,要相信直觉!

C. ssoj2984 蚂蚁 ants

Zkp 从小喜欢观察生物。这一天,他发现台阶上有 \(n\) 只蚂蚁排成一排。台阶可以视为长度无限的数轴,第 \(i\) 只蚂蚁的位置为 \(p_i\),有的朝左走有的朝右走。每只蚂蚁每秒钟都可以走 1 个长度单位,当两只蚂蚁面对着相遇的时候,他们会立即调转方向,以原来的速度向新方向继续前进。现在 zkp 想知道 \(T\) 秒过后,每只蚂蚁将会移动到哪里。

这个是蓝书P9(UVa 10881)上的内容。怎能不 A?

#include <cstdio>
#include <algorithm>
using namespace std; int n, T; struct node {int x, d, id; } G[200005]; bool cmp1(const node& a, const node& b) {return a.x < b.x || a.x==b.x && a.d<b.d; }
bool cmp2(const node& a, const node& b) {return a.id < b.id; } int main() {
scanf("%d%d", &n, &T);
for (int i=1; i<=n; ++i) scanf("%d%d", &G[i].x, &G[i].d),
G[i].id=i, G[i+n].x=G[i].x+(G[i].d?T:-T), G[i+n].d=G[i].d;
sort(G+n+1, G+(n<<1)+1, cmp1);
sort(G+1, G+n+1, cmp1); for (int i=1; i<=n; ++i) G[i].x=i;
sort(G+1, G+n+1, cmp2);
for (int i=1; i<=n; ++i) printf("%d ", G[G[i].x+n].x);
return 0;
}

D. ssoj3149 饥饿的狐狸

到你的宠物狐狸的晚餐时间啦!他的晚餐包含 \(N\) 块饼干,第 \(i\) 块饼干的温度是 \(T_i\) 摄氏度。同时,在晚餐中还包含了一大盘 \(W\) 摄氏度的水。

在喝了一口水之后,你的狐狸开始吃饭了。每当他吃一块饼干时,这块饼干的美味度为当前饼干与吃 / 喝的前一样食物(包括饼干和水)温度的差的绝对值。它可以在任意时间喝水(保证水喝不完),或按任意顺序吃饼干。

最后狐狸获得的美味值为它吃下的每块饼干的美味度之和。请求出狐狸获得的最小和最大的美味值。

要得到最小美味值,一种可行的方案是,狐狸先喝水,然后吃第一块饼干,再吃第三块饼干,接着喝水,最后吃下第二块饼干,这样做,它所感受到的温度分别为 \(20,18,18,20,25\) 摄氏度,总的美味度为 \(2+0+5=7\)。

要得到最大美味值,一种可行的方案是,狐狸先喝水,然后按顺序吃饼 \(2+7+7=16\)。

$1≤N≤105,0≤T_i,W≤109 $。

贪心。

观察题目,我们不难发现,要得到最大美味值,狐狸应该先交错吃温度最大的和最小的饼干,其中如果能喝冰水或开水就更好了。所以我们给所有饼干按照温度排序,交替选择左右端点吃,如果先喝水再吃能获得更大美味值就更好啦。这样最大美味值就求出来啦。(注意左右端点谁先开始,可能得到两个答案,再取个 max。)

那么最小美味值呢?我们肯定按照温度顺序吃饼干。这样每两个饼干之间的差值就是美味度。比如我们记第 \(i\) 个饼干和 \(i-1\) 个饼干的差值为 \(T_i-T_{i-1}\),则第 \(i+1\) 个饼干和 \(i\) 个饼干的差值为 \(T_{i+1}-T_i\),我们容易得到:如果不喝水,差值即为 \(T_n-T_1\)。此时即可分类讨论:

(1) 如果水温度在 \([T_1,T_n]\) 之间,喝水与不喝水,对答案没有影响,答案就是 \(T_n-T_1\)。(想一想,为什么?)

(2) 如果水温度小于 \(T_1\),我们又必须要喝水,答案再加上 \(W-T_1\),即为 \(T_n-W\)。

(3) 同理如果水温大于 \(T_n\),答案即为 \(W-T_1\)。

合并以上算式我们可以得到 \(\text{MinAns}=\max\{W-T_1,0\}+\max\{T_n-W,0\}\).

#include <cstdio>
#include <algorithm>
using namespace std;
#define ll long long int n, w; ll d[100003], anl, anh1, anh2; int main() {
scanf("%d%d", &n, &w);
for (int i=1; i<=n; ++i) scanf("%lld", &d[i]);
sort(d+1, d+n+1);
anl=max(0ll, w-d[1])+max(0ll, d[n]-w);
ll las=w, l=1ll, r=n;
for (int i=1; i<=n; ++i) {
if (i&1) anh1+=max(abs(d[l]-w), abs(d[l]-las)), las=d[l++];
else anh1+=max(abs(d[r]-w), abs(d[r]-las)), las=d[r--];
}
las=w, l=1ll, r=n;
for (int i=1; i<=n; ++i) {
if (i&1) anh2+=max(abs(d[r]-w), abs(d[r]-las)), las=d[r--];
else anh2+=max(abs(d[l]-w), abs(d[l]-las)), las=d[l++];
}
printf("%lld %lld\n", anl, max(anh1, anh2));
return 0;
}

8 November in 614的更多相关文章

  1. 7 November in 614

    每日总结不能少!让自己的头脑好好清醒清醒,才不会犯那些所谓的低级错误! Contest A. ssoj3045 A 先生砍香蕉树 根据数据范围 \(m\le 1000,b\le 10000\),显然本 ...

  2. 6 November in 614

    Contest A. greet map,完了. B. gift map,完了. C. [Usaco2008 Nov Gold] 安慰奶牛 最小生成树.新边权设为原边权的两倍,再加上两端点的点权.完了 ...

  3. 5 November in 614

    Contest A. ssoj2964 交错的士兵 \(n\) 个数的排列,从左到右依次为 1, 2, -, \(n\).\(n\) 次操作,对于第 \(i\) 次操作,从左到右分成很多段,每段 \( ...

  4. [POJ1765]November Rain

    [POJ1765]November Rain 试题描述 Contemporary buildings can have very complicated roofs. If we take a ver ...

  5. We will be discontinuing the Nitrous Development Platform and Cloud IDE on November 14th, 2016.

    我表示我很难过 Nitrous We will be discontinuing the Nitrous Development Platform and Cloud IDE on November ...

  6. TIOBE Index for November 2015(转载)

    原文地址:http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html November Headline: Java once a ...

  7. 日常英语---七、[Updated November 14 at 4:10 PM PST] Scheduled Game Update - November 14, 2018(n.标准)

    日常英语---七.[Updated November 14 at 4:10 PM PST] Scheduled Game Update - November 14, 2018(n.标准) 一.总结 一 ...

  8. Multi-Cloud & Kubernetes: Cloud Academy November 2018 Data Report

    https://cloudacademy.com/research/multi-cloud-kubernetes-devops-cloud-academy-data-report-nov-18/ No ...

  9. ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbilisi, November 24, 2010

    ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbil ...

随机推荐

  1. Vagrant 手册之 Vagrantfile - 提示及技巧

    原文地址 Vagrantfile 是一种非常灵活的配置格式.语法基于 Ruby,可以用它做很多事情.在本页使用一些提示和技巧时,请注意正确使用它们. 1. 使用循环定义虚拟机 如果你想对多机器应用稍微 ...

  2. WPF样式统一之DevExpress设置窗体,控件为Office风格

    DevExpress相信不少人用过,虽然人家不是免费的,但是用过的应该都知道,确实是花了心血的C#插件,下面来介绍下在DevExpress下如何统一设置自己的WPF程序为经典Windows风格. 窗体 ...

  3. PHP调试环境之:Eclipse for PHP

    Eclipse IDE for PHP Developers + Zend Debugger Feature . 在网上搜过一些朋友配置 eclipse --> php --> pdt , ...

  4. rsync+sersync实现文件同步

    一.目的 A服务器:11.11.11.11 源服务器 B服务器:22.22.22.22 目标服务器,既同步备份的目标 将A服务器的文件同步到B服务器上 二.rsync环境部署 1.关闭selinux, ...

  5. RDD缓存

    RDD的缓存 Spark速度非常快的原因之一,就是在不同操作中可以在内存中持久化或缓存数据集.当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他 ...

  6. VUE小案例--跑马灯效果

    自学Vue课程中学到的一个小案例,跑马灯效果 <!DOCTYPE html> <html lang="zh-CN"> <head> <me ...

  7. vue.js(09)--v-for中的key

    v-for中key的使用注意事项 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  8. ToolStripComboBox 绑定数据

    //添加ComboBox tcbbQueryCondition.ComboBox.DataSource = RelationalOperators.GetAllOperators(); tcbbQue ...

  9. elasticsearch 深入 —— normalizer

    keyword字段的normalizer属性类似于分析器,只是它保证分析链生成单个token. 在索引关键字之前,以及在通过诸如match查询之类的查询解析器或者通过诸如term查询之类的术语级查询搜 ...

  10. elasticsearch 基础 —— Jion父子关系

    前言 由于ES6.X版本以后,每个索引下面只支持单一的类型(type),因此不再支持以下形式的父子关系: PUT /company { "mappings": { "br ...