8 November in 614
我开始看心灵鸡汤了……
每当在书中读及那些卑微的努力,都觉得感动且受震撼。也许每个人在发出属于自己的光芒之前,都经历了无数的煎熬,漫长的黑夜,无尽的孤独,甚至不断的嘲讽和否定,但好在那些踮脚的少年,最后都得到了自己想要的一切。
– 某乎
学习信息竞赛对我来说,是一份美妙而充实的身心体验。随着一份份代码的 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的更多相关文章
- 7 November in 614
每日总结不能少!让自己的头脑好好清醒清醒,才不会犯那些所谓的低级错误! Contest A. ssoj3045 A 先生砍香蕉树 根据数据范围 \(m\le 1000,b\le 10000\),显然本 ...
- 6 November in 614
Contest A. greet map,完了. B. gift map,完了. C. [Usaco2008 Nov Gold] 安慰奶牛 最小生成树.新边权设为原边权的两倍,再加上两端点的点权.完了 ...
- 5 November in 614
Contest A. ssoj2964 交错的士兵 \(n\) 个数的排列,从左到右依次为 1, 2, -, \(n\).\(n\) 次操作,对于第 \(i\) 次操作,从左到右分成很多段,每段 \( ...
- [POJ1765]November Rain
[POJ1765]November Rain 试题描述 Contemporary buildings can have very complicated roofs. If we take a ver ...
- 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 ...
- TIOBE Index for November 2015(转载)
原文地址:http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html November Headline: Java once a ...
- 日常英语---七、[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.标准) 一.总结 一 ...
- Multi-Cloud & Kubernetes: Cloud Academy November 2018 Data Report
https://cloudacademy.com/research/multi-cloud-kubernetes-devops-cloud-academy-data-report-nov-18/ No ...
- 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 ...
随机推荐
- 16/8/23_CSS自动换行
转载:http://blog.csdn.net/ye987987/article/details/8011875 自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容器撑大,挺 ...
- 16/7/27-PHP环境配置(php5.5.3.7+mysql5.7.12+Apache2.4)
非常感谢http://www.cnblogs.com/jicheng1014/archive/2012/01/26/2329531.html 配置php环境问题 php.ini 路径 "\& ...
- js-jssdk微信H5选择多张图片预览并上传(兼容ios,安卓,已测试)
值得注意的是: 1.在微信H5中选择图片运用:wx.chooseImage,成功后返回: res.localIds用于上传图片使用 上传图片:wx.uploadImage. 2.上传图片的时候 ...
- MySQL 查询语句--------------进阶8:分页查询
#进阶8:分页查询 /* 应用场景:要显示的数据,一页显示不全,需要分页提交sql请求 语法: select 查询列表 from 表 [join type] join 表2 on 连接条件 [wher ...
- 微信小程序这一块(上)
1.根目录下面的文件: 凡是以app开头的都是全局配置文件 app.js 全局逻辑文件 注册小程序 app.json 全局配置文件 https://developers.weixin.qq.com/m ...
- Angular 输入中的禁止特定输入值--Validator 与 Directive 实现
1 前言 最近在项目中涉及表单的情况下,需要对用户输入进行过滤,比如填写用户名的时候不可以使用空格或者特殊符号,这里有几个解决方法: 使用 Angular 的正则同步验证器 使用 RxJS对输入的值进 ...
- JNDI配置笔记
先在tomcat Context.xml配置文件中配置 <Resource name="jdbc/elifecrm" type="javax.sql.DataSou ...
- html5_websql
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); var msg; db.transaction(function ...
- solr的moreLikeThis实现“相似数据”功能
在我们使用网页搜索时,会注意到每一个结果都包含一个 “相似页面” 链接,单击该链接,就会发布另一个搜索请求,查找出与起初结果类似的文档.Solr 使用 MoreLikeThisComponent(ML ...
- spring-第十二篇之两种后处理器
1.扩展IoC容器使用后处理器扩展 bean后处理器:对容器中的bean进行后处理,也就是额外的加强. 容器后处理:对IoC容器进行后处理,增强容器功能. 2.bean后处理器 负责处理容器 ...