17967 大师姐唱K的固有结界

该题有题解

时间限制:1000MS  内存限制:65535K
提交次数:41 通过次数:8 收入:107

题型: 编程题   语言: G++;GCC;VC

Description

大家总所周知,我校ACM校队中有个13级的师姐,人称大师姐!
她的代码能力可谓是女中豪杰,但是,大师姐除了敲代码很牛逼以外,还是个麦霸。
在某次聚会中,大师姐从头到尾一口气战了6个小时,而且还唱了《青藏高原》、《天路》等逆天般高音的歌曲。 为什么大师姐唱歌这么厉害!?秘密就在于大师姐唱歌的时候会施放固有结界,在这个结界的有效时间内,大师姐可以不对喉咙造成任何负担地唱任意
歌曲。大师姐在一次唱K中可以施放两次固有结界,每次结界的最长持续时间为T分钟。
对于大师姐来说,她在施放结界的情况下从头到尾唱完一首歌则不会对喉咙造成任何影响,否则将按这首歌原来的损伤值计算。
当然,大师姐可以在施放第一次结界结束时立刻施放第二次,此时不视为结界中断。
大师姐是个聪明的女生,所以为了让喉咙负担最低,她会选择两个最佳的时刻施放结界。
假设大师姐现在的喉咙的舒适度是H,我们已经为师姐点了n首歌,师姐必须按照这个顺序演唱,每首歌都有长度t(分钟),以及在不施放结界时唱这首
歌会减低喉咙舒适度d。

请求出唱完这n首歌之后,师姐喉咙的舒适度的最大值。出题人:Lrc

输入格式

输入的第一行是三个正整数,结界的持续时间T(T <= 10000)、喉咙最初的舒适度H(H <= 100000)和歌曲的数量n(n <= 1000)。
下面n行每一行分别对应一首歌,每一行有两个正整数,分别为这首歌的时间t(t <= 100)以及这首歌对喉咙的损伤d(d <= 10000)。

输出格式

唱完这n首歌之后,师姐喉咙的舒适度的最大值,如果结果小于0,则输出0。

输入样例

5 100 4
6 10
5 9
4 8
2 1

输出样例

89

提示

够了这题的,建议把自己的提交代码拿出来试试以下这组数据能不能通过:
5 100 6
2 4
3 5
1 2
1 3
4 5
5 6
答案为92,若您的程序输出答案不对,建议自行找出原因并修改代码。

此数据不作评测数据,但会在比赛后增加相应测试数据,已经通过的代码不作重新评判。

************************************************************************************************************************************

解题思路:

1.有2次释放结界的机会,所以就可以2次连在一起放结界,两次分开放结界。

2.当一首歌的时间少于结界的时间时,将会有剩下的时间。那么如果下一首歌的时间又小于剩下的时间,那么开一次结界就可以唱n首歌。

************************************************************************************************************************************

#include <stdio.h>
int T, H, n, tail;
struct song
{
int t;
int d;
};
struct song a[1000]={0};
int take(int j, int time)
{
int add=0;
while(a[j].t<=time&&time&&j<n){
add+=a[j].d;
time-=a[j].t;
j++;
}
tail=j;
return add;
}
int main()
{
int i, m, max=0;
scanf("%d%d%d", &T, &H, &n);
for(i=0;i<n;i++){
scanf("%d%d", &a[i].t, &a[i].d);
H-=a[i].d;
}
m=H; for(i=0;i<n;i++)//两个结界在一起
{
int lt=2*T;//两结界的时间
int temp;
temp=m+take(i, lt);
if(temp>max) max=temp;
} for(i=0;i<n;i++)//两个结界分开
{
int lt=T, j;
int temp;
int t2;
t2=take(i, lt);
for(j=tail;j<n;j++)
{
temp=m+take(j, lt)+t2;
if(temp>max) max=temp;
}
}
if(max>=0)
printf("%d\n", max);
else
printf("0\n");
return 0;
}

************************************************************************************************************************************

附上几组数据:

/////////////////////

输入数据:
1 100 10
1 10
1 20
1 2
1 35
1 21
1 5
1 43
1 12
1 5
1 3 输出答案:
22
/////////////////////
输入数据:
4 100 1
10 110 输出答案:
1|0

/////////////////////

scau 17967 大师姐唱K的固有结界的更多相关文章

  1. scau 17967 大师姐唱K的固有结界 分类暴力 + RMQ

    由于能放两次,那么分类, 1.连续使用,(这个直接O(n^2)暴力) 2.分开使用. 分开使用的话,首先暴力枚举,用T时间,能从第1个位置,唱到第几首歌,然后剩下的就是从pos + 1, n这个位置, ...

  2. 算法---数组总结篇2——找丢失的数,找最大最小,前k大,第k小的数

    一.如何找出数组中丢失的数 题目描述:给定一个由n-1个整数组成的未排序的数组序列,其原始都是1到n中的不同的整数,请写出一个寻找数组序列中缺失整数的线性时间算法 方法1:累加求和 时间复杂度是O(N ...

  3. 面试题40:最小(大)的K个数

    剑指offer40题,同时这也是面试高发题目 2019.4 蚂蚁金服问道:求1000万个数据中的前K个数. 思路: 1.直接上排序算法,然后我们就取排好顺序的前K个即可.但是单考虑快排,时间复杂度也要 ...

  4. 主席树(可持久化线段树) 静态第k大

    可持久化数据结构介绍 可持久化数据结构是保存数据结构修改的每一个历史版本,新版本与旧版本相比,修改了某个区域,但是大多数的区域是没有改变的, 所以可以将新版本相对于旧版本未修改的区域指向旧版本的该区域 ...

  5. 两个数组各个数相加或相乘变成一个矩阵求第K大

    input 1<=T<=20 1<=n<=100000,1<=k<=n*n a1 a2 ... an 0<ai<=10000 b1 b2 ... bn ...

  6. hdu 5919 主席树(区间不同数的个数 + 区间第k大)

    Sequence II Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

  7. LOJ.114.K大异或和(线性基)

    题目链接 如何求线性基中第K小的异或和?好像不太好做. 如果我们在线性基内部Xor一下,使得从高到低位枚举时,选base[i]一定比不选base[i]大(存在base[i]). 这可以重构一下线性基, ...

  8. 【题解】51nod 1686第K大区间

    成功的秘诀,在于克服自己看题解的冲动……[笑哭].自己A掉这题还是灰常开心的~ 以及爱死 two - pointer ! two - pointer 大法是真的好哇……这个题目有上一题的经验:求第\( ...

  9. 【题解】51nod 1685第K大区间2

    二分答案+++++++(。・ω・。) 感觉这个思路好像挺常用的:求第\(K\) 大 --> 二分第 \(K\) 大的值 --> 检验当前二分的值排名是第几.前提:排名与数值大小成单调性变化 ...

随机推荐

  1. Java JDK安装教程以及JDK多版本间快速切换配置

    原本想自己写一篇,结果在网上发现一篇写的特别好的博文,大家可以去原网址围观浏览加点赞, 只是搬运工+迷弟. 原文地址:https://blog.csdn.net/qq_38916130/article ...

  2. 20191105 《Spring5高级编程》笔记-第16章

    第16章 Web应用程序 16.3 MVC和Spring MVC介绍 16.3.3 Spring MVC WebApplicationContext层次结构 在Spring MVC中,Dispatch ...

  3. JMeter学习笔记16-如何输出HTML格式的性能测试报告

    文本来学习下,如何输入HTML格式的JMeter测试报告.前面已经介绍, 如果要做性能测试,需要在GUI上设计好你的Test Plan,设置各种场景和负载值,包括多少个线程,多少个用户,循环多少次.设 ...

  4. [hdu6558][CCPC2018吉林D题]The Moon(期望dp)

    题目链接 当时年少不懂期望$dp$,时隔一年看到这道题感觉好容易.... 定义状态$dp[i]$表示当前的$q$值为$i$时的期望,则当$q$值为$100$时$dp[100]=100/q$,这时后发现 ...

  5. POJ 1383题解(树的直径)(BFS)

    题面 Labyrinth Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 4997 Accepted: 1861 Descript ...

  6. uWSGI、uwsgi、WSGI、之间的关系,为什么要用nginx加uWSGI部署。

    WSGI 协议 WSGI:是一种协议规范,起到规范参数的作用,就像告诉公路一样,规定超车靠右行,速度不低于90km/h,等.但这一切都是对双方进行沟通,比如,重庆到武汉这条高速路,这儿重庆和武汉就各为 ...

  7. 初学css 行内元素与块级元素

    行内元素与块级元素直观上的区别 1.行内元素会在一条直线上排列,都是同一行的,水平方向排列块级元素各占据一行,垂直方向排列.块级元素从新行开始结束接着一个断行. 2.块级元素可以包含行内元素和块级元素 ...

  8. 洛谷 - P4008 - 文本编辑器 - 无旋Treap

    https://www.luogu.org/problem/P4008 无旋Treap也可以维护序列. 千万要注意要先判断p节点存在才进行Show操作,不然输出一个'\0'(或者RecBin里面的东西 ...

  9. [翻译]解释JavaScript中的类型转换

    原文地址:JavaScript type coercion explained 类型转换是将值从一种类型转换为另一种类型的过程(比如字符串转换为数值,对象转换为布尔值,等等).任何类型,无论是原始类型 ...

  10. 自定义、操作cookie

    /** * 读取所有cookie * 注意二.从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交.浏览器提交Cookie时只会提交name与value属性.maxAg ...