中山纪中Day1--普及
早上一起,扑面是瓢泼的大雨。跨过千山万水,来到纪中门前,毅然以一种大无畏的英雄气概跨进了考场。
面对四道神题。然后,我成功过五关斩六将,A掉了2道题!!!
收获:优先队列(大、小根堆)
T1:APPLE
Wexley最近发现了一个古老的屏幕游戏。游戏的屏幕被划分成n列。在屏幕的底端,有一个宽为m列的篮子(m<n)。在游戏过程中,Wexley能左右移动这个篮子, Wexley的操作很犀利,移动是瞬间完成的,但是篮子必须始终都在屏幕中。 苹果从屏幕的顶端落下,每个苹果从n列中的某一列顶端掉落,垂直掉落到屏幕的底端。每个苹果总是在上一个苹果掉落到底端的时候开始掉落。Wexley想要通过移动篮子来接住所有的苹果。起先,篮子在屏幕的最左端。
求出Wexley要接住所有的苹果所需移动的最短距离。
思路:此题略简单,设置左端与右端,然后判断,移动,储蓄即可。
见代码:
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- int n,m,k,a[],l=,r,ans;
- int main()
- {
- //freopen("apple.in","r",stdin);
- //freopen("apple.out","w",stdout);
- scanf("%d%d%d",&n,&m,&k);
- r=m;
- for(int i=;i<=k;i++)
- {
- scanf("%d",&a[i]);
- if(a[i]>r)
- {
- while(a[i]>r)
- {
- ans++;
- l++;
- r++;
- }
- }
- while(a[i]<l)
- {
- ans++;
- l--;
- r--;
- }
- }
- printf("%d",ans);
- return ;
- }
好题哉!!!
T2:BRICK
Leo是一个快乐的火星人,总是能和地球上的OIers玩得很high。
2012到了,Leo又被召回火星了,在火星上没人陪他玩了,但是他有好多好多积木,于是他开始搭积木玩。
火星人能制造n种积木,积木能无限供应。每种积木都是长方体,第i种积木的长、宽、高分别为li、wi、hi。积木可以旋转,使得长宽高任意变换。Leo想要用这些积木搭一个最高的塔。问题是,如果要把一个积木放在另一个积木上面,必须保证上面积木的长和宽都严格小于下面积木的长和宽。这意味着,即使两块长宽相同的积木也不能堆起来。
火星上没有电脑,好心的你决定帮助Leo求出最高的塔的高度。
对于30%的数据 n<=8
对于100%的数据 n<=3000,最后答案不会超过32位整型
题意:相对清楚,下面看思路。
思路:因为是要严格小于,所以每种积木都只能用一次,我们把六种情况搞下来,然后因为长大于宽,所以可以排除掉一半。接着在以长宽各自排序,会出现一个序列。接着就是我们最熟悉的,最简单的DP模板:最长 单调下降序列。只不过最长变成了高之和最大,下降是长宽都小,仅此而已。然后考虑了下nlogn的情况,发现替换会很奇怪,可能出问题。也就只打了n2的算法。那也就这样了。因为3*n=9000,所以不会有问题。
见代码:
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- int n,h1,l1,w1,k,le=,b[],ans=-0x3f3f3f;
- struct brick{
- int h,l,w;
- };
- brick a[];
- bool cmp(brick x,brick y)
- {
- return x.l>y.l;
- }
- bool cmp1(brick x,brick y)
- {
- return x.w>y.w;
- }
- int main()
- {
- scanf("%d",&n);
- for(int i=;i<=n;i++)
- {
- scanf("%d%d%d",&h1,&l1,&w1);
- a[*i-].w=min(h1,l1);a[*i-].l=max(h1,l1);a[*i-].h=w1;
- a[*i-].w=min(w1,h1);a[*i-].l=max(w1,h1);a[*i-].h=l1;
- a[*i].w=min(w1,l1);a[*i].l=max(w1,l1);a[*i].h=h1;
- }
- sort(a+,a+*n+-+,cmp);
- while(k<=)
- {
- k++;
- if(a[k].l!=a[k-].l)
- {
- sort(a+le,a+k-+,cmp1);
- le=k;
- }
- }
- for(int i=;i<=*n;i++)
- {
- b[i]=a[i].h;
- }
- for(int i=;i<=*n;i++)
- {
- for(int j=i-;j>=;j--)
- {
- if(b[j]+a[i].h>=b[i]&&a[j].l>a[i].l&&a[j].w>a[i].w)
- b[i]=b[j]+a[i].h;
- }
- }
- for(int i=;i<=*n;i++)
- {
- if(b[i]>=ans)
- ans=b[i];
- }
- printf("%d",ans);
- return ;
- }
好题哉!!!
T3:TREELAND
Treeland是一个有n个城市组成的国家,其中一些城市之间有单向边连通。在这个国家中一共有n-1条路。我们知道,如果我们不考虑路的方向,那么我可以从任意城市到达任意城市。
最近,Treeland的总理Candy为了发展经济,想要从这n个城市中选择一个作为Treeland的首都,首都必须要能到达其他任意城市,这使得有些道路必须反向,付出的代价即需要反向的道路条数。
Candy想要选择一个城市作为首都,使得付出的代价最小。可能有多个城市满足条件,按编号从小到大输出。
思路:根据题解,先从1号节点遍历整棵树,让1号节点满足要求,可知需要的答案。然后顺便在遍历的过程中求出对节点u,需要几次反转让u能到达以u为子树的每个节点。完成之后,让u点可以走到1号点,这样的反转条数就是从1点到u点反转的次数。然后加上之前记录下的东西就可以了。
T4:STUDY
马上假期就要到了,THU的神犇Leopard假期里都不忘学霸,现在有好多门功课,每门功课都耗费他1单位时间来学习。
他的假期从0时刻开始,有1000000000个单位时间(囧rz)。在任意时刻,他都可以任意一门功课(编号1~n)来学习。
因为他在每个单位时间只能学习一门功课,而每门功课又都有一个截止日期,所以他很难完成所有n门功课。
对于第i门功课,有一个截止时间Di,若他能学完这门功课,他能够获得知识Pi。
在给定的功课和截止时间下,Leopard能够获得的知识最多为多少呢?
思路:必须得有一个反悔的过程,DP不大现实,贪心一次性贪完也不大现实。所以就出现了一个新的思路:将时间排序,有就放,如果没时间放,就和最小的比较,交换,再维护一个小根堆即可。
详见:YYCAKIOI
总体来说,今天200分,考了个第三出来,成绩还算可以,争取消化干净,继续努力!
中山纪中Day1--普及的更多相关文章
- 「中山纪中集训省选组D1T1」最大收益 贪心
题目描述 给出\(N\)件单位时间任务,对于第\(i\)件任务,如果要完成该任务,需要占用\([S_i, T_i]\)间的某个时刻,且完成后会有\(V_i\)的收益.求最大收益. 澄清:一个时刻只能做 ...
- 中山纪中集训Day1测试(摸鱼)
AT3 粉刷匠 Description 赫克托是一个魁梧的粉刷匠,而且非常喜欢思考= = 现在,神庙里有N根排列成一直线的石柱,从1到N标号,长老要求用油漆将这些石柱重新粉刷一遍.赫克托有K桶颜色各不 ...
- 「中山纪中集训省选组D4T1」折射伤害 高斯消元
题目描述 在一个游戏中有n个英雄,初始时每个英雄受到数值为ai的伤害,每个英雄都有一个技能"折射",即减少自己受到的伤害,并将这部分伤害分摊给其他人.对于每个折射关系,我们用数对\ ...
- 「中山纪中集训省选组D2T1」书堆 欧拉常数
题目描述 蚂蚁是勤劳的动物,他们喜欢挑战极限.现在他们迎来了一个难题!蚂蚁居住在图书馆里,图书馆里有大量的书籍.书是形状大小质量都一样的矩形.蚂蚁要把这些书摆在水平桌子的边缘.蚂蚁喜欢整洁的布置,所以 ...
- 中山纪中集训Day5叒是测试(划淼)
A组T1 矩阵游戏(game) 九校联考24OI__D1T1 问题描述 LZK发明一个矩阵游戏,大家一起来玩玩吧,有一个N行M列的矩阵.第一行的数字是1,2,…M,第二行的数字是M+1,M+2…2*M ...
- 中山纪中集训Day4双是测试(划沝) 九校联考-DL24凉心模拟Day2
A组T1 锻造 (forging) 1.1 题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现......自己连一个史莱姆 ...
- 中山纪中集训Day2又是测试(划水)
A组T1 bzoj 2674 Attack Description chnlich 非常喜欢玩三国志这款游戏,并喜欢用一些策略出奇制胜.现在,他要开始征服世界的旅途了.他的敌人有N 座城市和N 个太守 ...
- 2016.8.15上午纪中初中部NOIP普及组比赛
2016.8.15上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1333 这次比赛不怎么好,因为这套题目我并不是很擅长. 可同学们 ...
- 2016.8.18上午纪中初中部NOIP普及组比赛
2016.8.18上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1336 翻!车!啦!好吧,那是因为大神归来. 进度: 比赛:AC ...
随机推荐
- istio部署-istio prometheus
参考 fleeto/sleep fleeto/flaskapp 1. 使用 Prometheus 1.1 访问 Prometheus 1.1.1 端口转发 Prometheus 服务默认启用. # o ...
- 结合字符串常量池/String.intern()/String Table来谈一下你对java中String的理解
1.字符串常量池 每创建一个字符串常量,JVM会首先检查字符串常量池,如果字符串已经在常量池中存在,那么就返回常量池中的实例引用.如果字符串不在池中,就会实例化一个字符串放到字符串池中.常量池提高了J ...
- util之Set
1.定义: Set<Integer>set = new TreeSet<Integer>(); 注意: TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不 ...
- OpenCV图像载入、显示和输出到文件以及滑块的使用
图像载入 imread()函数 Mat imread(const string& filename, int flags = 1); 第一个参数为文件名 第二个参数为载入标识 flags &g ...
- ASP.NET + MVC5 入门完整教程三 (下) ---MVC 松耦合
建立松耦合组件 MVC 模式最重要的特性之一视他支持关注分离,希望应用程序中的组件尽可能独立,只有很少的几个可控依赖项.在理想的情况下,每个组件都不了解其他组件,而只是通过抽象接口来处理应用程序的其他 ...
- span标签间距
最近在做的一个项目里面碰到这么一个问题: <p> <span>块1</span> <span>块2</span> </p> 在“ ...
- 每天进步一点点------SOPC的uC/OS-II应用(一)
uC/OS-II(又名Micro C/OS)是基于嵌入式系统的完整的,可移植.可固化.可裁剪的可剥夺型实时内核,其已经广泛应用在航空飞行器.医疗设备.工业控制等可靠性和稳定性要求较高的场合.该内核的代 ...
- Dev-Cpp/Code::Block/MinGW下使用EasyX
众所周知,EasyX是个很香的东西,但EasyX目前只支持Visual Studio,那么如果要在MinGW(Dev-Cpp和Code::Block均使用这个编译器)上使用EasyX怎么办呢? 这篇文 ...
- 当map的key为对象时,js无法解析key的属性值
重写对象的toString方法,按照json数据的规则 然后前台string转json 控制台打印 这个方法不需要引入其他包 如果map的key属性过多,或者key是集合,可以在后台先转json,然后 ...
- js 时间格式化工具类
/** * 返回示例:0 天 4 小时 7 分钟 57 秒 * @param second 毫秒数 * @returns {String} 时间html */ function secondToDay ...