UESTC 764 失落的圣诞节 直接or线段树orRMQ
来源:互联网 发布:中美双边贸易数据 编辑:程序博客网 时间:2024/04/27 17:44
失落的圣诞节
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
在樱满集(Ouma Shuu, 简称集)成功阻止修一郎博士,救出楪祈(Yuzuriha Inori, 简称祈)之后,由于默示录病毒的爆发,天王州环状七号线内被封锁,
集所在的学校也在此之内。封锁很快变成了清扫,为了打败政府的幽灵部队,逃出封锁区域,集在学校建立了void
王国。
每个学生都有自己专属的void
,每种专属void
都有对应的属性值,集能将各个学生专属的void
取出来,并交给他们使用。普通学生不能使用别人
的void
,但是作为主角的集和祈能使用任意学生的void
,显然,如果集或者祈使用了某种void
,那么该void
的主人就不能再使用了。当void
在
集或者祈手中,void
的属性值会有所改变,并且集和祈能同时使用同一个学生的void
,且使用相同void
的时候,还会有额外加成的属性值(这就
是传说中爱的力量?)
为了打倒幽灵部队,集决定派出void
的属性值的
和能达到的最大值。
Input
首先输入一个
第一行为一个整数void
的人数。(
第二行为void
的主人用它时的属性值。
第三行为void
被集使用时的属性值。
第四行为void
被祈使用时的属性值。
第五行为void
被集和祈同时使用时的属性加成值。
Output
每组数据输出一行。输出满足题目要求的最大属性值。
Sample input and output
14200 300 400 200150 200 450 400100 300 700 500100 100 100 100
1550
Hint
在正常情况下,同一种void
不能被多个人使用,唯一的特例情况是题面中所说的集和祈同时使用的时候。
样例解释:
- 普通学生使用第二种
void
,属性值为300 - 集使用第三种
void
,属性值为450 - 祈使用第三种
void
,属性值为700
属性加成为
My Solution
#include <cstdio>#include <algorithm>//#define LOCALusing namespace std;const int maxn=10000+8;int N[maxn],S[maxn],Q[maxn],Sha,sum[maxn];int main(){ #ifdef LOCAL freopen("a.txt","r",stdin); #endif // LOCAK int T,n,maxN,mni,mni2,maxN3,mni3, maxSQ,mqsi, maxs, maxq; scanf("%d",&T); while(T--){ maxN=0;maxSQ=0; scanf("%d",&n); for(int i=0;i<n;i++) {scanf("%d",&N[i]);if(maxN<N[i]) {maxN=N[i];mni=i;} } for(int i=0;i<n;i++) scanf("%d",&S[i]); for(int i=0;i<n;i++) scanf("%d",&Q[i]); for(int i=0;i<n;i++) {scanf("%d",&Sha);sum[i]=Sha+S[i]+Q[i];if(maxSQ<sum[i]) {maxSQ=sum[i];mqsi=i;} } int max1=0,max2=0,max3=0, maxSQ2=0,maxN2=0; if(mni!=mqsi) max3=maxSQ+maxN; else{ for(int i=0;i<n;i++) if(i!=mqsi) maxSQ2=max(maxSQ2,sum[i]); max1=maxN+maxSQ2; //max0 for(int i=0;i<n;i++) if(i!=mni) if(maxN2<N[i]) {maxN2=N[i];mni2=i;} max2=maxN2+maxSQ; max3=max(max1,max2); } int max4=0,max5=0,max6=0; maxs=0;maxq=0; for(int i=0;i<mni;i++){ maxq=max(maxq,Q[i]); maxs=max(maxs,S[i]); } for(int i=mni+1;i<n;i++){ maxq=max(maxq,Q[i]); maxs=max(maxs,S[i]); } max4=maxq+maxs+maxN; maxq=0;maxs=0; for(int i=0;i<mni2;i++){ maxq=max(maxq,Q[i]); maxs=max(maxs,S[i]); } for(int i=mni2+1;i<n;i++){ maxq=max(maxq,Q[i]); maxs=max(maxs,S[i]); } max5=maxq+maxs+maxN2; maxN3=0; for(int i=0;i<n;i++) if(i!=mni&&i!=mni2) if(maxN3<N[i]) {maxN3=N[i];mni3=i;} maxq=0;maxs=0; for(int i=0;i<mni3;i++){ maxq=max(maxq,Q[i]); maxs=max(maxs,S[i]); } for(int i=mni3+1;i<n;i++){ maxq=max(maxq,Q[i]); maxs=max(maxs,S[i]); } max6=maxq+maxs+maxN3; printf("%d",max(max3,max(max4,max(max5,max6)))); if(T) printf("\n"); } return 0;}
没有用线段树,这里有3个要扫描的数组,再用数组建树,加上函数相对for(;;)的时间开销,时间复杂度差不多了,可能还会慢一点。
- UESTC 764 失落的圣诞节 直接or线段树orRMQ
- poj3264 Balanced Lineup(线段树orRMQ)
- uestc 1593 老司机破阵(线段树 or multiset)
- UESTC 1425(线段树)
- UESTC 1324线段树
- UESTC 841 休生伤杜景死惊开 【线段树】
- hdu5805 NanoApe Loves Sequence 线段树 or 直接扫描
- UESTC 1073 秋实大哥与线段树 线段树&&改值与区间和 or 树状数组
- UESTC 94 Bracket Sequence(线段树的区间更新)
- UESTC 844 程序设计竞赛 【维护值稍多的线段树】
- UESTC 1598 加帕里公园的friends 线段树区间合并
- UESTC 1581 Rikka的烦恼 分块、线段树
- uestc 1425 线段树 区间合并
- UESTC 1546 线段树 区间合并
- UESTC 1558 线段树点更新
- uestc 1546 括号序列 区间线段树
- uestc Another LCIS 区间线段树
- UESTC 1057 线段树区间更新
- SQL(MSSQLSERVER)服务启动错误代码3414
- 人生致命的3个经典问题
- LeetCode解题报告--Search for a Range
- IOS OC 字符串
- 简单工厂模式、工厂模式以及抽象工厂模式
- UESTC 764 失落的圣诞节 直接or线段树orRMQ
- Maven日常笔记总结
- 杭电 线段树 (个人整理(基础入门版))(多题练习.)(简单风格)
- 房子
- android开发文档中有一个关于录音的类MediaRecord
- Objective-C研究之Block的使用
- 秒杀设计方案讨论
- easyui--datebox
- 10006---jQuery事件