UESTC 1019 SSRaligun酱的魔法符文 用记忆实际区间最左min1最右max1来减小时间复
来源:互联网 发布:网上认证发票软件 编辑:程序博客网 时间:2024/04/30 04:29
用记忆实际区间最左min1最右max1,来减小时间复杂度 但注意min1要初始化为里面可能的最大值或比最大值大一点,而max1则是最小值或比最小值小一点,这些也是要注意的吧,不小心漏掉,到时候出问题又要找bug。
也让自己意识到了else if 重叠用的时候该注意的(程序中打★★的地方)。
SSRaligun酱的魔法符文
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
打dota总是在蓝猫与小鹿之间纠结不清的SSRaligun
酱是学院都市里一名隐藏的
卷轴。在学院都市那终日不见阳光的ACM(Arch Chain Master)街上,SSRaligun酱
拥有一家名叫秋之月
的魔法卷轴商店。
不同的魔法卷轴需要不同的制作方法,所以制作一个魔法卷轴是很困难的,但是SSRaligun酱拥有一部如何制作魔法卷轴的秘术之书。(传说是一位
名为Icerain94
的顶级能力者赠送给SSRaligun
酱的禁书)秘术之书通常把魔法卷轴视作为一个
每次操作在
在魔法填充结束之后如果同一格被填入了多种符文,符文就会互相融合,形成新的符文,符文合成公式如下:
type1+type1=type1 type2+type2=type2 type3+type3=type3type1+type2=type4 type4+type1=type4 type4+type2=type4type1+type3=type5 type5+type1=type5 type5+type3=type5type2+type3=type6 type6+type2=type6 type6+type3=type6type4+type4=type4 type5+type5=type5 type6+type6=type6type4+type3=type7 type5+type2=type7 type6+type1=type7type4+type5=type7 type4+type6=type7 type5+type6=type7type1+type2+type3=type7 type4+type5+type6=type7type7+type1=type7 type7+type2=type7 type7+type3=type7type7+type4=type7 type7+type5=type7 type7+type6=type7type7+type7=type7
温馨提示:上述公式可以总结为基础符文形成二阶符文,二阶符文形成三阶符文,同属性高阶符文吸收低阶符文,同属性同阶符文吸收同阶符文。
(相信我,理解这段话将大大缩短你的解题时间,而理解这些公式的内涵比你手工模拟公式的代码量要小很多)
现在我们知道了制作某个魔法卷轴所需要的
那么现在你能算出这种魔法符文是那种魔法符文吗?
Input
第一行为数据组数
接下来
对应魔法符文种类.
Output
对于每一组数据输出一行,每一行行首为Case
+#
标号,然后输出数量最多的魔法符文的
小到大依次输出,详细见样例)。
Sample input and output
26 31 3 31 2 21 1 110 21 5 26 10 3
Case #1: type3 type6 type7Case #2: type2 type3
My Solution
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn=2000+8;int L[maxn];int cot[9];void solve(int i,int b){ if(L[i]==0) L[i]=b; //最开始的时候肯定是0了,所以讨论的时候这个不要漏掉 else if(L[i]==7) ; else if(L[i]==6) {if(b==4||b==5||b==7||b==1) L[i]=7;} //★★ else if(L[i]==5) {if(b==6||b==4||b==2||b==7) L[i]=7;} //★★ else if(L[i]==4) {if(b==6||b==5||b==3||b==7) L[i]=7;} //★★ else if(L[i]==3) {if(b==4) L[i]=7;else if(b==2||b==1) L[i]+=b+1;else if(b==5||b==6||b==7) L[i]=b;} //L[i]+=b+1 else if(L[i]==2) {if(b==5) L[i]=7;else if(b==3||b==1) L[i]+=b+1;else if(b==4||b==6||b==7) L[i]=b;} else if(L[i]==1) {if(b==6) L[i]=7;else if(b==3||b==2) L[i]+=(b+1);else if(b==4||b==5||b==7) L[i]=b;}}int main(){ int T,n,m,l,r,type,min1,max1,ans,kase=0; //关于最大值最小值的使用,要初始化对。。 及其记忆来减小复杂度 scanf("%d",&T); while(T--){ memset(L,0,sizeof(L));memset(cot,0,sizeof(cot)); min1=n;max1=0;ans=0; //min1和max1的置零 scanf("%d%d",&n,&m); while(m--){ scanf("%d%d%d",&l,&r,&type); min1=min(min1,l);max1=max(max1,r); for(int i=l;i<=r;i++) solve(i,type); } for(int i=min1;i<=max1;i++) (cot[L[i]])++;//cout<<L[i]<<" "; for(int i=1;i<=7;i++) ans=max(ans,cot[i]);//cout<<cot[i]<<" ";} printf("Case #%d:",++kase); for(int i=1;i<=7;i++) {if(cot[i]==ans) printf(" type%d",i);} if(T) printf("\n"); } return 0;}
- UESTC 1019 SSRaligun酱的魔法符文 用记忆实际区间最左min1最右max1来减小时间复
- apk减小最好用的最实际的操作
- 最左推导与最右推导
- js中如何获取某个元素到浏览器最左和最右的距离
- 编译原理之最左推导和最右推导
- 线性布局下,如何最左或者最右
- UOJ #3(【NOI2014】魔法森林-LCT区间最值)
- css实现文字居左日期居右排列最简单的网页代码
- 左值与右值(最基本的你懂吗?)
- UESTC OJ1220(最短路)
- UESTC 30 最短路
- http://acm.pku.edu.cn/JudgeOnline/problem?id=3667 区间更新+求满足长短的最左区间
- 最左推导和最右推导,语法树,二义性文法
- 区间最值的问题
- 最简单的时间
- 2016 UESTC Training for Dynamic Programming D - 柱爷的恋爱 区间dp、记忆化搜索
- 记忆中最艳阳高照的一个上午
- 最有效的英文单词记忆法
- 修改img的src属性刷新图片时,图片地址相同图片无变化的问题
- PHP Traits代码复用方法浅析
- JQueryAjax+SpringMVC跨域请求
- JNI 生成.h头文件
- 项目中部署Grunt
- UESTC 1019 SSRaligun酱的魔法符文 用记忆实际区间最左min1最右max1来减小时间复
- Ubuntu_for_ros出现问题,选择重装ubuntu系统
- Net操作Excel(终极方法NPOI)
- zookeeper学习系列(三)zookeeper基本原理
- javac 和java 使用的 -classpath 参数
- BT
- 讲义4:数据的插入和修改
- Acm - 百钱买百鸡问题
- 野人学Android第二弹——照片的拍摄与存储(二)