csp 画图 java,CCF CSP 路徑解析 JAVA 201604-3 100分

又做了一遍,不知道為什么,最后是錯誤90分。

很神奇的找不到最后10分為什么錯。有人能找到嗎?。。

找到了問題 :

因為沒有對輸入的“當前路徑”正則化。

eg:

3

//d1/d2

/...

/d3///../d4

輸出:

//d1/d2

/...

/d4

其中/..的情況經研究不會出現。

100分代碼:

package csp2016_04_3;

import java.util.Scanner;

public class Main{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

int p = sc.nextInt();

sc.nextLine();

String pwd = sc.nextLine();

String s[] = new String[p];

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

s[i] = sc.nextLine();

}

//go

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

if(s[i].length()==0){

s[i] = s[i]+pwd;

}

//非絕對路徑處理

if(s[i].charAt(0)!='/'){

s[i] = pwd+"/"+s[i]+"/";

}

int pos;

//remove 多個//

while((pos = s[i].indexOf("//")) != -1){

int count = 2;

while(pos+count

count++;

}

s[i] = s[i].substring(0, pos)+s[i].substring(pos+count-1, s[i].length());

}

//remove ./

while((pos = s[i].indexOf("/./")) !=-1){

s[i] = s[i].substring(0, pos)+s[i].substring(pos+2, s[i].length());

}

//remove ../

while( (pos = s[i].indexOf("/../")) != -1 ){

if(pos!=0){

int pos2 = 0;

pos2 = s[i].lastIndexOf("/", pos-1);

s[i] = s[i].substring(0, pos2)+s[i].substring(pos+3, s[i].length());

}else{

s[i] = s[i].substring(3, s[i].length());

}

}

//remove last/

if(s[i].length()>1 && s[i].charAt(s[i].length()-1) == '/' ){

s[i] = s[i].substring(0, s[i].length()-1);

}

System.out.println(s[i]);

}

}

}

90分代碼:

package csp2016_04_3;

import java.util.Scanner;

public class Main{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

int p = sc.nextInt();

sc.nextLine();

String pwd = sc.nextLine();

String s[] = new String[p];

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

s[i] = sc.nextLine();

}

//go

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

String np = pwd;

if(s[i].length()==0){

System.out.println(np);

}else{

//非絕對路徑處理

if(s[i].charAt(0)!='/'){

s[i] = np+"/"+s[i]+"/";

}

int pos;

//remove 多個//

while((pos = s[i].indexOf("//")) != -1){

int count = 2;

while(pos+count

count++;

}

s[i] = s[i].substring(0, pos)+s[i].substring(pos+count-1, s[i].length());

}

//remove ./

while((pos = s[i].indexOf("/./")) !=-1){

s[i] = s[i].substring(0, pos)+s[i].substring(pos+2, s[i].length());

}

//remove ../

while( (pos = s[i].indexOf("/../")) != -1 ){

if(pos!=0){

int pos2 = 0;

pos2 = s[i].lastIndexOf("/", pos-1);

s[i] = s[i].substring(0, pos2)+s[i].substring(pos+3, s[i].length());

}else{

s[i] = s[i].substring(3, s[i].length());

}

}

//remove last/

if(s[i].length()>1 && s[i].charAt(s[i].length()-1) == '/' ){

s[i] = s[i].substring(0, s[i].length()-1);

}

}

System.out.println(s[i]);

}

}

}

問題描述

試題編號:

201604-3

試題名稱:

路徑解析

時間限制:

1.0s

內存限制:

256.0MB

問題描述:

問題描述

在操作系統中,數據通常以文件的形式存儲在文件系統中。文件系統一般采用層次化的組織形式,由目錄(或者文件夾)和文件構成,形成一棵樹的形狀。文件有內容,用於存儲數據。目錄是容器,可包含文件或其他目錄。同一個目錄下的所有文件和目錄的名字各不相同,不同目錄下可以有名字相同的文件或目錄。

為了指定文件系統中的某個文件,需要用

路徑來定位。在類 Unix 系統(Linux、Max OS X、FreeBSD等)中,路徑由若干

部分構成,每個部分是一個目錄或者文件的名字,相鄰兩個部分之間用 / 符號分隔。

有一個特殊的目錄被稱為

根目錄,是整個文件系統形成的這棵樹的根節點,用一個單獨的 / 符號表示。在操作系統中,有

當前目錄的概念,表示用戶目前正在工作的目錄。根據出發點可以把路徑分為兩類:

Ÿ

絕對路徑:以 / 符號開頭,表示從根目錄開始構建的路徑。

Ÿ

相對路徑:不以 / 符號開頭,表示從當前目錄開始構建的路徑。

例如,有一個文件系統的結構如下圖所示。在這個文件系統中,有根目錄 / 和其他普通目錄 d1、d2、d3、d4,以及文件 f1、f2、f3、f1、f4。其中,兩個 f1 是同名文件,但在不同的目錄下。

d87defa08ed560ce32d7833ae4209d92.png

對於 d4 目錄下的 f1 文件,可以用絕對路徑 /d2/d4/f1 來指定。如果當前目錄是 /d2/d3,這個文件也可以用相對路徑 ../d4/f1 來指定,這里 .. 表示上一級目錄(注意,根目錄的上一級目錄是它本身)。還有 . 表示本目錄,例如 /d1/./f1 指定的就是 /d1/f1。注意,如果有多個連續的 / 出現,其效果等同於一個 /,例如 /d1///f1 指定的也是 /d1/f1。

本題會給出一些路徑,要求對於每個路徑,給出

正規化以后的形式。一個路徑經過正規化操作后,其指定的文件不變,但是會變成一個不包含 . 和 .. 的絕對路徑,且不包含連續多個 / 符號。如果一個路徑以 / 結尾,那么它代表的一定是一個目錄,正規化操作要去掉結尾的 /。若這個路徑代表根目錄,則正規化操作的結果是 /。若路徑為空字符串,則正規化操作的結果是當前目錄。

輸入格式

第一行包含一個整數

P,表示需要進行正規化操作的路徑個數。

第二行包含一個字符串,表示當前目錄。

以下

P 行,每行包含一個字符串,表示需要進行正規化操作的路徑。

輸出格式

P 行,每行一個字符串,表示經過正規化操作后的路徑,順序與輸入對應。

樣例輸入

7

/d2/d3

/d2/d4/f1

../d4/f1

/d1/./f1

/d1///f1

/d1/

///

/d1/../../d2

樣例輸出

/d2/d4/f1

/d2/d4/f1

/d1/f1

/d1/f1

/d1

/

/d2

評測用例規模與約定

1 ≤

P ≤ 10。

文件和目錄的名字只包含大小寫字母、數字和小數點 .、減號 - 以及下划線 _。

不會有文件或目錄的名字是 . 或 .. ,它們具有題目描述中給出的特殊含義。

輸入的所有路徑每個長度不超過 1000 個字符。

輸入的當前目錄保證是一個經過正規化操作后的路徑。

對於前 30% 的測試用例,需要正規化的路徑的組成部分不包含 . 和 .. 。

對於前 60% 的測試用例,需要正規化的路徑都是絕對路徑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值