#37793: 答對前40%,能幫我看看邏輯哪裡有問題嗎


zhoudaniel02@gmail.com (周孝倫)

學校 : 銘傳大學
編號 : 235507
來源 : [114.136.10.77]
最後登入時間 :
2024-05-19 11:28:27
k733. 3. 磁軌移動序列 -- 2023年6月APCS | From: [223.137.53.228] | 發表日期 : 2023-10-08 15:43

package a;

import java.util.*;

public class k733 {

public static void main(String[]args) {

Scanner sc=new Scanner(System.in);

String data=sc.nextLine();

String [] num1=data.split("[TLE]");

String [] cmd1=data.split("\\d+");

String cmdtemp="";

long []num=new long[num1.length];

for(int i=0;i<cmd1.length;i++)

cmdtemp+=cmd1[i];

for(int i=0;i<num1.length-1;i++) {

num1[i]=num1[i+1];

if(!num1[i].equals(""))

num[i]=Integer.parseInt(num1[i]);

}

String []cmd=cmdtemp.split("");

Stack<Integer>ind=new Stack<>();

for(int i=0;i<cmd.length;i++) {

if(cmd[i].equals("L"))

ind.add(i);

else if(cmd[i].equals("E")) {

int pop=ind.pop();

int firstT=pop;

long lo=0;

boolean count=true;

while(!cmd[firstT].equals("T"))

firstT--;

firstT=(int) num[firstT];

for(int loop=1;loop<=num[pop];loop++)

for(int p=pop+1;p<i;p++) {

if(cmd[p].equals("E"))

count=true;

if(!cmd[p].equals("E")) {

if(cmd[p].equals("L")) {

count=false;

lo+=num[p];

}

else if(cmd[p].equals("T")) {

if(count)

lo+=Math.abs(num[p]-firstT);

firstT=(int)num[p];

}

}

}

num[pop]=lo;//如果在迴圈內碰到了L,那就加L,並值到碰到E錢都不要計算T

lo=0;

}

}

int go=0;

long ans=0;

int last=0;

for(int i=0;i<num.length;i++) {

if(cmd[i].equals("T")) {

last=(int) num[i];

break;

}

}

for(int i=0;i<cmd.length;i++)

if(cmd[i].equals("L")) {

if(go==0)

ans+=num[i];

go++;

}

else if(cmd[i].equals("E"))

go--;

else if(cmd[i].equals("T")) {

if(go==0)

ans+=Math.abs(num[i]-last);

last=(int)num[i];

}

System.out.println(ans);

}

}

 
ZeroJudge Forum