T1 题目描述:

1999. Wexley接苹果(apple) 
(File IO): input:apple.in output:apple.out

时间限制: 1000 ms  空间限制: 128000 KB  具体限制  

Goto ProblemSet

题目描述

         Wexley最近发现了一个古老的屏幕游戏。游戏的屏幕被划分成n列。在屏幕的底端,有一个宽为m列的篮子(m<n)。在游戏过程中,Wexley能左右移动这个篮子,            Wexley的操作很犀利,移动是瞬间完成的,但是篮子必须始终都在屏幕中。 苹果从屏幕的顶端落下,每个苹果从n列中的某一列顶端掉落,垂直掉落到屏幕的底端。每个苹果总是在上一个苹果掉落到底端的时候开始掉落。Wexley想要通过移动篮子来接住所有的苹果。起先,篮子在屏幕的最左端。
         求出Wexley要接住所有的苹果所需移动的最短距离。 
 

输入

第一行,两个整数n、m,如题所述
第二行,一个整数k,表示掉落的苹果总数
接下来k行,每行一个整数Ai,表示每个苹果掉落的位置

输出

一行一个整数,表示所需移动最短距离
 

样例输入

Sample Input1:
5 1
3
1
5
3 Sample Input2:
5 2
3
1
5
3  

样例输出

Sample Output1:
6 Sample Output2:
4  
 

数据范围限制

【数据范围】
对于30%的数据,m<n<=5,k<=10
对于100%的数据,1<=m<n<=10,1<=k<=20

思路:贪心模拟,使每次移动数尽量少即可.难度较容易。

附上AC代码:(考试完了重新码的,考试的时候的代码有点小问题)

#include <cstdio>
#include <iostream>
using namespace std;
int n,m,k,a[];
int b[],head,ans,tmp;
int main()
{
freopen("apple.in","r",stdin);
freopen("apple.out","w",stdout);
scanf("%d %d",&n,&m);
scanf("%d",&k);
b[]=;
for(int i=;i<=k;i++)
{
scanf("%d",&a[i]);
}
head=m;
for(int i=;i<=k;i++)
{
if(head>=a[i] && (head-m+)<=a[i])
continue;
if(head<a[i])
{
ans+=a[i]-head;
head+=a[i]-head;
continue;
}
if((head-m+)>a[i])
{
int tmp=head;
head=a[i]+m-;
ans+=tmp-head;
continue;
}
}
printf("%d",ans);
}

T2

2000. 【2015.8.6普及组模拟赛】Leo搭积木(brick) 
(File IO): input:brick.in output:brick.out

时间限制: 1000 ms  空间限制: 128000 KB  具体限制  

题目描述

         Leo是一个快乐的火星人,总是能和地球上的OIers玩得很high。
         2012到了,Leo又被召回火星了,在火星上没人陪他玩了,但是他有好多好多积木,于是他开始搭积木玩。
       火星人能制造n种积木,积木能无限供应。每种积木都是长方体,第i种积木的长、宽、高分别为li、wi、hi。积木可以旋转,使得长宽高任意变换。Leo想要用这些积木搭一个最高的塔。问题是,如果要把一个积木放在另一个积木上面,必须保证上面积木的长和宽都严格小于下面积木的长和宽。这意味着,即使两块长宽相同的积木也不能堆起来。
       火星上没有电脑,好心的你决定帮助Leo求出最高的塔的高度。

【提示】
每种积木都可以拆分成高度分别为li、wi、hi的三种积木,另两边作为长和宽,保证长>=宽。

 

输入

第一行,一个整数n,表示积木的种数
接下来n行,每行3个整数li,wi,hi,表示积木的长宽高

输出

一行一个整数,表示塔高的最大值
 

样例输入

Sample Input1:
1
10 20 30 Sample Input2:
2
6 8 10
5 5 5 Sample Input3:
5
31 41 59
26 53 58
97 93 23
84 62 64
33 83 27  

样例输出

Sample Output1:
40 Sample Output2:
21 Sample Output3:
342
 

数据范围限制

对于30%的数据 n<=8
对于100%的数据 n<=3000,最后答案不会超过32位整型

思路:标答:动态规划。

  骗分:暴力DFS.

附上DFS30分代码TLE

#include <cstdio>
#include <iostream>
using namespace std;
int n,a[][],ans=,mina;
const int inf=;
void swap(int a,int b)
{
int c=b;
b=a;
a=c;
}
void dfs(int l,int w,int high)
{
if(high>ans)
ans=high;
if(w==mina)
{
return;
}
for(int i=;i<=n;i++)
{
if(a[i][]<l && a[i][]<w)
dfs(a[i][],a[i][],high+a[i][]);
if(a[i][]<w && a[i][]<l)
dfs(a[i][],a[i][],high+a[i][]);
if(a[i][]<l && a[i][]<w)
dfs(a[i][],a[i][],high+a[i][]);
if(a[i][]<w && a[i][]<l)
dfs(a[i][],a[i][],high+a[i][]);
if(a[i][]<l && a[i][]<w)
dfs(a[i][],a[i][],high+a[i][]);
if(a[i][]<w && a[i][]<l)
dfs(a[i][],a[i][],high+a[i][]);
if(a[i][]>l && a[i][]>w)
continue;
}
}
int main(){
freopen("brick.in","r",stdin);
freopen("brick.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int a1,b1,c1;
scanf("%d %d %d",&a1,&b1,&c1);
if(c1>b1)
swap(c1,b1);
if(a1<b1)
swap(a1,b1);
if(c1>b1)
swap(c1,b1);
if(mina>c1)
mina=c1;
a[i][]=a1;a[i][]=b1;a[i][]=c1;
}
dfs(inf,inf,);
printf("%d",ans);
}

100分代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
struct Node{
int w,l,h;
}a[];
int Max(int a,int b)
{
if(a>b)
return a;
return b;
}
int Min(int a,int b)
{
if(a>b)
return b;
return a;
}
bool bdx(Node c,Node d)
{
return c.l<d.l;
}
int main()
{
freopen("brick.in","r",stdin);
freopen("brick.out","w",stdout);
int n,f[],ans;
scanf("%d",&n);
int o,p,q;
for(int i=;i<=n;i++)
{
scanf("%d %d %d",&o,&p,&q);
a[i].l=Max(o,p);a[i].w=Min(o,p);a[i].h=q;
a[i+n].l=Max(o,q);a[i+n].w=Min(o,q);a[i+n].h=p;
a[i+*n].l=Max(p,q);a[i+*n].w=Min(p,q);a[i+*n].h=o;
}
std::sort(a+,a+*n+,bdx);
for(int i=;i<=*n;i++)
f[i]=a[i].h;
for(register int i=*n;i>=;i--)
for(register int j=i+;j<=*n;j++)
if(a[i].w<a[j].w && a[i].l != a[j].l)
f[i]=Max(f[j]+a[i].h,f[i]);
for(int i=;i<=*n;i++)
ans=Max(ans,f[i]);
printf("%d",ans);
}

T4

2002. 【2015.8.6普及组模拟赛】Leopard学霸(study) 
(File IO): input:study.in output:study.out

时间限制: 1000 ms  空间限制: 128000 KB  具体限制  

题目描述

           马上假期就要到了,THU的神犇Leopard假期里都不忘学霸,现在有好多门功课,每门功课都耗费他1单位时间来学习。
           他的假期从0时刻开始,有1000000000个单位时间(囧rz)。在任意时刻,他都可以任意一门功课(编号1~n)来学习。
           因为他在每个单位时间只能学习一门功课,而每门功课又都有一个截止日期,所以他很难完成所有n门功课。
           对于第i门功课,有一个截止时间Di,若他能学完这门功课,他能够获得知识Pi。
           在给定的功课和截止时间下,Leopard能够获得的知识最多为多少呢?
 

输入

第一行,一个整数n,表示功课的数目
接下来n行,每行两个整数,Di和Pi

输出

输出一行一个整数,表示最多学得的知识数
 

样例输入

3
2 10
1 5
1 7  

样例输出

17

【样例说明】
第一个单位时间学习第3个功课(1,7),然后在第二个单位时间学习第1个功课(2,10)
 

数据范围限制

10% n<=25
60% n<10000
100% 1<=n<=100000,Di、Pi<=1000000000
最后的答案可能超过32位整型
 

思路:标答:最小堆

  接近标答:贪心。

附上80分贪心代码(TLE+RE)

#include <cstdio>
#include <algorithm>
#define rr register
bool time[],bj;
struct Node{
int di,pi;
}a[];
inline bool bdx(Node c,Node d)
{
return c.pi>d.pi;
}
int main()
{
freopen("study.in","r",stdin);
freopen("study.out","w",stdout);
rr long long ans=0LL;
rr int n,mark=;
scanf("%d",&n);
for(rr int i=;i<=n;i++)
scanf("%d %d",&a[i].di,&a[i].pi);
std::sort(a+,a+n+,bdx);
for(rr int i=;i<=n;i++)
{
if(!time[a[i].di])
{
time[a[i].di]=true;
ans+=a[i].pi;
}
else
{
rr int j=a[i].di;
while(time[j])
j--;
if(j<)
continue;
ans+=a[i].pi;
time[j]=true;
}
}
printf("%lld",ans);
}

目前这道题还没AC...

2019中山纪念中学夏令营-Day1[JZOJ]的更多相关文章

  1. 2019中山纪念中学夏令营-Day20[JZOJ] T1旅游详解

    2019中山纪念中学夏令营-Day20[JZOJ] 提高组B组 Team_B组 T1 旅游 Time Limits: 2000 ms  Memory Limits: 262144 KB Descrip ...

  2. 2019中山纪念中学夏令营-Day21[JZOJ]

    2019中山纪念中学夏令营-Day21[JZOJ] 提高组(B组模拟赛)Team_B (由于本人太弱,并没有订正完题目) (题解大部分是从官方题解文件上摘来的) 日常膜拜大神:じやゆん蒟蒻 正文部分: ...

  3. 2019中山纪念中学夏令营-Day9[JZOJ](第六次模拟赛)

    Begin (题目的排序方式:Unkown其实是按心情排的) 异或:(摘自百度百科) 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”,计算机符号为“xor”.其运算法则为: ...

  4. 2019中山纪念中学夏令营-Day12[JZOJ]

    Begin (题目的排序方式:题号) 每期新姿势:(今天推荐一位巨佬)Cefola-Kiroxs 推荐知识:namespace的用法(本赛我的代码中将用到) 2019.08.12[NOIP普及组]模拟 ...

  5. 2019中山纪念中学夏令营-Day4[JZOJ]

    Begin (题目的排序方式:难易程度) 什么是对拍: 对拍是一种在写完程序后,验证自己程序是不是正解的比较方便的方法. 实现过程: 对同一道题,再打一个暴力程序,然后用一些大数据等跑暴力程序来进行验 ...

  6. 2019中山纪念中学夏令营-Day2[JZOJ]

    博客的开始,先聊聊代码实现: 每次比赛以后,要有归纳错误的习惯. 错误小结: 1.读入:scanf(“%c”)会读入回车和空格,但cin不会. 2.对于二维数组的输入,不能把m,n搞混了,会引起严重的 ...

  7. 2019中山纪念中学夏令营-Day14 图论初步【dijkstra算法求最短路】

    Dijkstra是我学会的第一个最短路算法,为什么不先去学SPFA呢?因为我在luogu上翻到了一张比较神奇的图: 关于SPFA -它死了 以及网上还有各位大佬的经验告诉我:SPFA这玩意很容易被卡. ...

  8. 2019中山纪念中学夏令营-Day19 数论初步【GCD(最大公约数),素数相关】

    关于GCD的一些定理或运用的学习: 1. 2.二进制算法求GCD 思想:使得最后的GCD没有2(提前把2提出来) 代码实现: #include <cstdio> #define int l ...

  9. 中山纪念中学培训DAY1

    哇啊啊啊啊啊啊$……$ 并不像说环境怎么样. $Day1$模拟赛 稳重一点选了提高$B$ 然后$5min$后: $t1$装压$DP$最短路 $t2$裸地贪心 $t3……$哇$t3$怎么做啊啊啊啊. $ ...

随机推荐

  1. 关于项目在网页中运行部分jsp出现乱码(由request.getRequestDispatcher("XXX.jsp").forward(request, response)造成)的解决方法

    在写jsp的时候发现部分的jsp在浏览器预览时出现乱码,为一堆问号,如图: 当时问了同学,只有部分jsp会出现乱码,因为重新建一个jsp在运行就没有错误,可以显示出来,所以发现是jsp头部的错误,当新 ...

  2. AtCoder AGC032E Modulo Pairing (二分、贪心与结论)

    题目链接 https://atcoder.jp/contests/agc032/tasks/agc032_e 题解 猜结论好题. 结论是: 按\(a_i\)从小到大排序之后,一定存在一种最优解,使得以 ...

  3. 2.nohup和&后台运行,进程查看及终止

    1.nohup和& 语法:nohup Command [ Arg … ] [& ] nohup:不挂断地运行命令 &:在后台运行 示例:nohup java -jar app2 ...

  4. 微信小程序 改变radio(单选钮)默认大小

    /* 单选钮样式 */ radio { transform:scale(0.5); }

  5. C++入门经典-例8.3-子类显示调用父类构造函数

    1:当父类含有带参数的构造函数时,创建子类的时候会调用它吗?答案是通过显示方式才可以调用. 无论创建子类对象时调用的是那种子类构造函数,都会自动调用父类默认构造函数.若想使用父类带参数的构造函数,则需 ...

  6. C++入门经典-例7.5-对象的指针,函数指针调用类成员

    1:指向相应对象的指针就是对象的指针,它的生明方法与其他类型一样,如下: 类名 *p; 类的指针可以调用它所指向对象的成员.形式如下: p->类成员; 2:代码如下: (1)cat.h #inc ...

  7. uniapp导航栏自定义按钮及点击事件

    本文链接:https://blog.csdn.net/qq_33807889/article/details/89945674第一步:显示按钮假设页面名称为:AddSort 在pages.json中找 ...

  8. mysql5.7以上基本配置

    MySQL表名区分大小写设置 关闭MySQL服务 在服务运行目录找到my.ini或者my.cnf文件 find / -name my.cnf 打开文件,找到[mysqld]在下面增加一行 lower_ ...

  9. js向input的value赋值

    js与jquery:在我印象里面都是一样的,今天利用空闲的时间来总结一下,js与jquery究竟有什么区别? js : 是一门网页的脚本语言 jquery :jquery是基于js的一种框架,也就是说 ...

  10. mysql数据库基本操作sql语言

    mysql的启动与关闭 启动 /etc/init.d/mysql start 多实例使用自建脚本启动 2种关闭数据库方法 mysqladmin -uroot -p密码 shutdown #优雅关闭/e ...