Problem G. Game Rank---Urozero Autumn Training Camp 2016-Day 1||简单模拟
来源:互联网 发布:caffe安装 编辑:程序博客网 时间:2024/06/06 17:09
题目描述:
简单模拟即可,签到题,注释写的比较详细。
AC代码:
/*2017年8月31日23:49:24G 简单模拟AC */ #include <iostream>#include <map>#include <set>#include <string>#include <cstring>#include <string.h>#include <cstdio>#include <algorithm>#include <cmath>#include <stack>#include <vector>#include <queue>using namespace std;const int maxn=1e4+10;char s[maxn];int pre[maxn],len;int rank_s[]={0,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2};bool con_win;//连胜标志 bool legend;// 传说标志 bool drop_rank;//掉星标志 int cur_s,cur_rank,rank_stars;//当前总星数 当前rank 当前rank的星数 //检查是否连胜 bool check_con_win(int i){//连续三个W并且处于可以有连胜奖励的rank范围内 if(pre[i]>=3&&con_win){ return true; } else return false;}//初始化 void init(){ con_win=true; legend=false; drop_rank=false; cur_s=0; cur_rank=25; rank_stars=0; //初始化pre[] for(int i=0;i<maxn;i++) pre[i]=0; //初始化pre[0] if(s[0]=='W') pre[0]=1; else pre[0]=0; //求pre[i] for(int i=1;i<len;i++){ if(s[i]=='W'){ pre[i]=pre[i-1]+1; } else{ pre[i]=0; } } }void rank_change(bool win,int &stars,int &rank,int i){ // legend if(rank==0) legend=true; //rank<=5 else if(rank<=5){ if(win) stars++; else stars--; if(!win){ //处在当前rank的0颗星 输了就要掉到下一个rank rank_star 为下一个rank满星-1; if(rank_stars==0){ rank++; rank_stars=rank_s[rank]-1; } //否则直接rank_stars-1 else{ rank_stars--; } } else{ //处在当前rank 满星 赢了就要上一个rank rank_star初始化1颗星 if(rank_stars==rank_s[rank]){ rank--; rank_stars=1; } //否则 rank_star+1 else{ rank_stars++; } } } //rank<=10 else if(rank<=19){ if(win) stars++; else stars--; if(!win){ if(rank_stars==0){ rank++; rank_stars=rank_s[rank]-1; } else{ rank_stars--; } } else{ //考虑连胜情况 +2颗星 if(check_con_win(i)){ stars++;// con_win so get a bonus star if(rank_stars==rank_s[rank]){ rank--; rank_stars=2; } else if((rank_stars+1)==rank_s[rank]){ rank--; rank_stars=1; } else{ rank_stars+=2; } } //不连胜 同上 else{ if(rank_stars==rank_s[rank]){ rank--; rank_stars=1; } else{ rank_stars++; } } } } //rank==20 要特别考虑 因为rank=20 0颗星是不会掉段的 其他情况同上 else if(rank==20){ if(win) stars++; else if(rank_stars>0 ) stars--; if(!win){ if(rank_stars>0){ rank_stars--; } } else{ if(check_con_win(i)){ stars++;// con_win so get a bonus star if(rank_stars==rank_s[rank]){ rank--; rank_stars=2; } else if((rank_stars+1)==rank_s[rank]){ rank--; rank_stars=1; } else{ rank_stars+=2; } } else{ if(rank_stars==rank_s[rank]){ rank--; rank_stars=1; } else{ rank_stars++; } } } } //rank<=25 赢了得星输了不掉 所以只考虑win 的情况就行 else if (rank<=25){ if(win) stars++; else return; if(check_con_win(i)){ stars++;// con_win so get a bonus star if(rank_stars==rank_s[rank]){ rank--; rank_stars=2; } else if((rank_stars+1)==rank_s[rank]){ rank--; rank_stars=1; } else{ rank_stars+=2; } } else{ if(rank_stars==rank_s[rank]){ rank--; rank_stars=1; } else{ rank_stars++; } } } //end //printf("%d:%d\n",i,rank);}//检查状态 连胜标志 传说标志 掉rank标志void check_status(){ if(cur_rank<6) con_win=false; else con_win=true; if(cur_rank==0) legend=true; else legend=false; if(cur_rank>20||(cur_rank==20&&cur_s==10)) drop_rank=false; else drop_rank=true;}void solve(){len=strlen(s); for(int i=0;i<len;i++){ if(s[i]=='W'){ check_status(); rank_change(true, cur_s, cur_rank,i); } else{ check_status(); rank_change(false, cur_s, cur_rank,i); } } }int main(){ scanf("%s",s); init(); solve(); if(cur_rank==0){ printf("Legend\n"); } else printf("%d\n",cur_rank); return 0;}
阅读全文
0 0
- Problem G. Game Rank---Urozero Autumn Training Camp 2016-Day 1||简单模拟
- Problem J. Jumbled Compass---Urozero Autumn Training Camp 2016-Day 1||签到&模拟时针转动
- Problem E. Exponial---Urozero Autumn Training Camp 2016-Day 1||指数降幂公式
- KTU Programming Camp (Winter Training Day 1)
- Petrozavodsk Summer Training Camp 2016 Problem I. Vier 随机化+枚举
- 2016 NCPC Game Rank(模拟)
- NCPC 2016 Game Rank(纯模拟)
- 2016 Al-Baath University Training Camp Contest-1(gym101028)
- 2016 Al-Baath University Training Camp Contest-1(gym101028)
- 2016 Al-Baath University Training Camp Contest-1
- Codeforce 2016 Al-Baath University Training Camp Contest-1
- 2016 Al-Baath University Training Camp Contest-1
- 计蒜客 ACM ICPC 2017 Warmup Contest 1 G Game Rank
- Codeforces Gym 100676G Training Camp 状压dp
- Gym 100676G Training Camp 很好的一个dp
- Gym 100676G Training Camp 很好的一个dp
- Tri_integral Autumn Training 2
- 2015 Autumn Training #0
- 选择排序算法
- React前后端如何同构,防止重复渲染
- hdu 1050
- hdu6189 Law of Commutation 2017ACM-ICPC全国邀请赛(广西) 找规律
- Emacs 配置 :使用快捷键格式化代码
- Problem G. Game Rank---Urozero Autumn Training Camp 2016-Day 1||简单模拟
- HDU
- 图书管理系统(spring springmvc bootstrap)
- 如何防止源码外泄
- Struts2返回JSON对象的方法总结
- Python学习笔记 7—面向对象编程
- Codevs 1154 能量项链
- 28:单词倒排( 1.7编程基础之字符串)
- Pandas基础学习与Spark Python初探