import java.awt.List;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Scanner;

 //按照自己的想法改了一下题目、基本思想不变、这个题目太有趣了^_^
 /*Description
 古希腊有个关于西西弗斯的神话:
 西西弗斯被众神判决推运一块石头至山顶。由于巨石本身的重量,它被推到山顶却又总要滚下山脚。
 于是西西弗斯又得把石块推上山去。如此反复,永无止境,没有尽头。众神认为,让西西弗斯服这永恒的劳役是最严酷的惩罚。
 二哥被押入地狱。他被众神判决扛着一块巨砖在山路上走,再原路返回,如此反复,没有尽头。
 众神规定二哥独自走山路的时间不得超过M秒( 1≤M≤10,000,000 )。整条山路被划分成T个长度相同的小段( 1≤T≤100,000 ),
 并且,众神用Si表示第i个小段的路况。Si为u,f,d这3个字母之一,它们分别表示第i个小段是上坡、平地、下坡。
 二哥要花U秒( 1≤U≤100 )才能走完一段上坡路,走完一段平地的耗时是F秒( 1≤F≤100 ),走完一段下坡路要花D秒( 1≤D≤100 )。
 注意,沿山路原路返回的时候,原本是上坡的路段变成了下坡路,原本是下坡的路段变成了上坡路。
 二哥对生活充满激情,但他遭受着难以用言语尽述的非人折磨:痛苦扭曲的脸,被巨砖死死压住的抖动的肩膀,沾满泥土的双脚,呕心沥血,
 不停的工作。这是典型的西西弗斯式的命运。贝多芬,歌德,叔本华,你才,还有高斯,爱因斯坦的命运,都是典型的西西弗斯式的命运,无一例外。
 众神想让二哥能在按时返回的前提下,走最远的路。所以众神向知道他最多能在这条山路上走多远。
 Input Format
 第1行:5个空格隔开的整数:M,T,U,F,D。
 第2..T+1行:第i+1行有一个字母Si,描述第i段山路的路况。
 Output Format
 一行,有一个整数为二哥在按时回到起点前提下,最多能跑到多远。
 Sample Input
 13 5 3 2 1
 u
 f
 u
 d
 f
 Sample Output
 3
 样例解释
 众神规定二哥的最大耗时为13秒,他跑步的山路一共被划分成5段。二哥走完一段上坡的耗时为3秒,平地为2秒,下坡为1秒。
 二哥走完山路的前3段,然后返回,总耗时为3+2+3+1+2+1=12秒,如果他跑得更远,就无法按时回到起点。*/
 public class Test1{
 static Scanner scanner;
 static String str[] = {"请输入二哥的最大耗时:", 
 "上坡有几段:","平地有几段:", "下坡有几段", 
 "二哥走完一段上坡的耗时为几秒:","二哥走完一段平地为几秒:", "二哥走完一段下坡为几秒"};
 static int num[] = new int[7];
 static int size, count = 0, distance = 0;
 static ArrayList<Character> list = new ArrayList<Character>();

 public static void main(String args[]){ 
 System.out.println("u,f,d分别表示是上坡、平地、下坡");
 //输入数据
 for(int i = 0; i < 7; i++){
 System.out.println(str[i]);
 scanner = new Scanner(System.in);
 num[i] = scanner.nextInt();
 }

 //产生路段的字符放入list 并打乱顺序
 for(int i = 1; i < 1+3; i++){
 size = num[i]; //表示等于num[1] num[2] num[3]大小
 for(int n = 0; n < size; n++){
 if(i == 1){
 list.add('u'); 
 }else if(i == 2){
 list.add('f');
 }else{
 list.add('d');
 }
 } 
 }
 Collections.shuffle(list); //打乱顺序

 //打印出路况
 System.out.println("道路情况为:");
 for(int i = 0; i < list.size(); i++){
 System.out.println( list.get(i) );
 }


 for(int i = 0; i < list.size(); i++){
 if(list.get(i) == 'u'){
 distance = num[4] + num[6];
 }else if(list.get(i) == 'f'){
 distance = num[6] + num[4];
 }else{
 distance = num[5] + num[5];
 }

 if(distance > num[1])
 break;


 }

 System.out.println("二哥走完山路的前" + distance + "段、然后返回!");

 //产生路段的字符放入数组 无法打乱顺序 so用了ArrayList
 /*landnum = num[2] + num[3] + num[4];
 char array[] = new char[landnum];

 for(int i = 0; i < 3; i++){
 size = num[i+2]; //表示等于num[2] num[3] num[4]大小
 for(int n = 0; n < size; n++){
 if(i == 0){
 array[count++] = 'u'; 
 }else if(i ==1){
 array[count++] = 'f';
 }else{
 array[count++] = 'd';
 }
 } 
 }*/


 }
 }

 /*结果:
 
 主要运用了一下ArrayList 感觉比数组好用多了!!
 */