POJ1059 Chutes and Ladders
2013-11-11 18:28
344 查看
题目来源:http://poj.org/problem?id=1059
题目大意:
有一种叫做“ChutesandLadders”(梯子和滑梯)的简单游戏。游戏在一块棋盘上进行,棋盘上有编号从1-100的格子,玩家们从假定的编号为0的格子处出发。各玩家轮流投掷色子(上有数字1-6),色子的数字表示玩家在棋盘上将前进的步数,最先到达100号格子的玩家胜利。
当然游戏不会仅仅这么无聊。在棋盘上不同的格子之间可能通过Ladder(梯子,从编号小的格子连至编号大的格子)和“Chute”(滑梯,从编号大的格子连至编号小的格子)连接起来。如果,一次投色子后前进到达的格子处是ladder或chute的起点,则玩家将到达ladder或chute通向的格子。注意:终点格子处的ladder和chute都是无效的,但起点处的有效。
此外,有一些特殊的格子:写有“miss-a-turn”的格子表示玩家一旦到达它们,将失去下一轮的投色子前进机会,写有“extra-turn”的格子表示玩家可以立即再投一次色子再前进一次。起点和终点处的格子都不会是这两种特殊格子。
如果一个玩家当前处于编号95以上的格子处,如果它们投掷的色子使它们前进的终点超过了100,那么这次这次投掷将被忽略。
输入:输入的开始为少于1000次的色子投掷结果,每个都是1到6的整数,由6表示结束。
接下来是一个或多个游戏数据集。每个数据集包含三个部分。
第一部分:一行表示游戏中的玩家数,多于1少于6。
第二部分:棋盘中的ladders和chutes.ladders和chutes每个都由两个1-99的整数表示起点和终点。当遇到一行“00”时表示该部分结束。
第三部分:棋盘中的“miss-a-turn”格和“extra-turn”格。每行一个,如果数字是负数说明是“miss-a-turn”,正数说明是“extra-turn”(例如:-15表示15号格是"miss-a-turn"格,25表示25号格是“extra-turn”).0表示该部分结束。
输出:每轮游戏对应1行,输出该轮游戏的赢家编号,输入已保证会找到赢家。
SampleInput
SampleOutput
ViewCode
题目大意:
有一种叫做“ChutesandLadders”(梯子和滑梯)的简单游戏。游戏在一块棋盘上进行,棋盘上有编号从1-100的格子,玩家们从假定的编号为0的格子处出发。各玩家轮流投掷色子(上有数字1-6),色子的数字表示玩家在棋盘上将前进的步数,最先到达100号格子的玩家胜利。
当然游戏不会仅仅这么无聊。在棋盘上不同的格子之间可能通过Ladder(梯子,从编号小的格子连至编号大的格子)和“Chute”(滑梯,从编号大的格子连至编号小的格子)连接起来。如果,一次投色子后前进到达的格子处是ladder或chute的起点,则玩家将到达ladder或chute通向的格子。注意:终点格子处的ladder和chute都是无效的,但起点处的有效。
此外,有一些特殊的格子:写有“miss-a-turn”的格子表示玩家一旦到达它们,将失去下一轮的投色子前进机会,写有“extra-turn”的格子表示玩家可以立即再投一次色子再前进一次。起点和终点处的格子都不会是这两种特殊格子。
如果一个玩家当前处于编号95以上的格子处,如果它们投掷的色子使它们前进的终点超过了100,那么这次这次投掷将被忽略。
输入:输入的开始为少于1000次的色子投掷结果,每个都是1到6的整数,由6表示结束。
接下来是一个或多个游戏数据集。每个数据集包含三个部分。
第一部分:一行表示游戏中的玩家数,多于1少于6。
第二部分:棋盘中的ladders和chutes.ladders和chutes每个都由两个1-99的整数表示起点和终点。当遇到一行“00”时表示该部分结束。
第三部分:棋盘中的“miss-a-turn”格和“extra-turn”格。每行一个,如果数字是负数说明是“miss-a-turn”,正数说明是“extra-turn”(例如:-15表示15号格是"miss-a-turn"格,25表示25号格是“extra-turn”).0表示该部分结束。
输出:每轮游戏对应1行,输出该轮游戏的赢家编号,输入已保证会找到赢家。
SampleInput
3632513423120 2 695 991 00 -3 98 0 2 399 690 00 0 0
SampleOutput
2 2
模拟题水过。
//////////////////////////////////////////////////////////////// //POJ1059ChutesandLadders //Memory:228KTime:0MS //Language:C++Result:Accepted /////////////////////////////////////////////////////////////// #include<iostream> #include<algorithm> usingnamespacestd; structLadder{ intstart; intend; }; intdie[1000]; intcounter[6]; booltrapped[6]; intplayer_num; Ladderladders[200]; intladder_cnt; boolmiss_turn[101]; boolextra_turn[101]; intcmp(Ladder&a,Ladder&b){ returna.start<=b.start; } intbin_seach(intv,ints,inte){ if(s>v||v>ladders[e].start||v<ladders[s].start){ return-1; } intmid=(s+e)/2; if(v==ladders[mid].start){ returnladders[mid].end; }elseif(v<ladders[mid].start){ returnbin_seach(v,s,mid-1); }else{ returnbin_seach(v,mid+1,e); } } intmain(void){ //读入色子投掷结果 for(inti=0;i<1000;++i){ cin>>die[i]; if(die[i]==0){ break; } } while(cin>>player_num&&player_num>0){ //读取玩家数 memset(miss_turn,false,sizeof(miss_turn)); memset(extra_turn,false,sizeof(extra_turn)); memset(counter,0,sizeof(counter)); memset(ladders,0,sizeof(ladders)); ladder_cnt=0; //读取ladders while(true){ cin>>ladders[ladder_cnt].start>>ladders[ladder_cnt].end; if(ladders[ladder_cnt].start==0){ break; } ++ladder_cnt; } //ladders排序 sort(ladders,ladders+ladder_cnt,cmp); //读入miss-a-turn和extra-turn while(true){ intt; cin>>t; if(t>0){ extra_turn[t]=true; }elseif(t<0){ miss_turn[-1*t]=true; }else{ break; } } //Gamestarts! intplayer_id=0; intdie_pointer=0; while(true){ intcurrent=counter[player_id];//当前位置 intdie_num=die[die_pointer++];//色子投掷结果 intdes=current+die_num;//目标位置 if(current==100){ cout<<player_id+1<<endl; break; } //当前玩家被困 if(trapped[player_id]){ trapped[player_id++]=false; player_id%=player_num; continue; } //恰好到达终点,结束 if(des==100){ cout<<player_id+1<<endl; break; } //超过100,忽略该次 elseif(des>100){ (++player_id)%=player_num; continue; } counter[player_id]=des; //判断该处是否有ladder或chute des=bin_seach(counter[player_id],0,ladder_cnt-1); if(des!=-1){ counter[player_id]=des; } //判断该处是否为miss-a-turn或extra-turn if(miss_turn[counter[player_id]]==true){ trapped[player_id]=true; } if(extra_turn[counter[player_id]]==true){ continue; } (++player_id)%=player_num; } } return0; }
ViewCode
相关文章推荐
- POJ 1059 Chutes and Ladders
- POJ 1059 Chutes and Ladders
- POJ 1059 Chutes and Ladders
- POJ - 1466 Girls and Boys 二分图+最大独立集
- POJ 1704 Georgia and Bob [阶梯Nim]
- poj 1704 Georgia and Bob 博弈
- poj 1704 Georgia and Bob nim博弈
- poj1466 Girls and Boys
- POJ-3537 Crosses and Crosses (博弈, SG函数)
- poj 1879 Tempus et mobilius Time and motion
- 【POJ】-1979-Red and Black(DFS)
- poj 1466 Girls and Boys (二分图最大独立集)
- zoj 2165 Red and Black (DFs)poj 1979
- POJ 1466 Girls and Boys
- poj2039 -- To and Fro
- POJ 3537 Crosses and Crosses
- POJ 2135 Farm Tour and HDU 1853 Cyclic Tour(费用流初运用)
- POJ1979 HDU1312 Red and Black【DFS】
- poj 1979 Red and Black
- poj 2288 Islands and Bridges 状压dp