emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks


Problem Statement
????
When editing a single line of text, there are four keys that can be used to move the cursor: end, home, left-arrow and right-arrow. As you would expect, left-arrow and right-arrow move the cursor one character left or one character right, unless the cursor is at the beginning of the line or the end of the line, respectively, in which case the keystrokes do nothing (the cursor does not wrap to the previous or next line). The home key moves the cursor to the beginning of the line, and the end key moves the cursor to the end of the line.  You will be given a int, N, representing the number of character in a line of text. The cursor is always between two adjacent characters, at the beginning of the line, or at the end of the line. It starts before the first character, at position 0. The position after the last character on the line is position N. You should simulate a series of keystrokes and return the final position of the cursor. You will be given a String where characters of the String represent the keystrokes made, in order. 'L' and 'R' represent left and right, while 'H' and 'E' represent home and end.
Definition
????
Class:
CursorPosition
Method:
getPosition
Parameters:
String, int
Returns:
int
Method signature:
int getPosition(String keystrokes, int N)
(be sure your method is public)
????

Constraints
-
keystrokes will be contain between 1 and 50 'L', 'R', 'H', and 'E' characters, inclusive.
-
N will be between 1 and 100, inclusive.
Examples
0)

????
"ERLLL"
10
Returns: 7
First, we go to the end of the line at position 10. Then, the right-arrow does nothing because we are already at the end of the line. Finally, three left-arrows brings us to position 7.
1)

????
"EHHEEHLLLLRRRRRR"
2
Returns: 2
All the right-arrows at the end ensure that we end up at the end of the line.
2)

????
"ELLLELLRRRRLRLRLLLRLLLRLLLLRLLRRRL"
10
Returns: 3

3)

????
"RRLEERLLLLRLLRLRRRLRLRLRLRLLLLL"
19
Returns: 12

This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.



没有难度

public class CursorPosition {
public int getPosition(String keystrokes, int N){
    
int p = 0;
    
if(keystrokes.lastIndexOf("H")>-1)
        keystrokes
=keystrokes.substring(keystrokes.lastIndexOf("H")+1);
    
if(keystrokes.lastIndexOf("E")>-1){
        keystrokes
=keystrokes.substring(keystrokes.lastIndexOf("E")+1);
        p
=N;
    }

    
for(int i=0;i<keystrokes.length();i++){
        
if(keystrokes.charAt(i)=='R')
            p
+=(p<N)?1:0;
        
else 
            p
-=(p>0)?1:0;
    }

    
return p;
}

public static void main(String[] args){
    System.out.println(
new CursorPosition().getPosition("ERLLL",10));
    System.out.println(
new CursorPosition().getPosition("EHHEEHLLLLRRRRRR",2));
    System.out.println(
new CursorPosition().getPosition("ELLLELLRRRRLRLRLLLRLLLRLLLLRLLRRRL",10));
    System.out.println(
new CursorPosition().getPosition("RRLEERLLLLRLLRLRRRLRLRLRLRLLLLL",19));
    System.out.println(
new CursorPosition().getPosition("R",9));

}

}

posted on 2005-12-01 16:57 emu 阅读(1587) 评论(6)  编辑  收藏 所属分类: google编程大赛模拟题及入围赛真题

评论

# re: google中国编程挑战赛模拟题 -- CursorPosition(1000分) 2005-12-06 21:31 Merlin Ran
这样的题就不用拿来现眼了吧。要真的比赛时,这题也就值100分。  回复  更多评论
  

# re: google中国编程挑战赛模拟题 -- CursorPosition(1000分) 2005-12-06 22:17 emu
就是啊,这次中国锦标赛的模拟题比上次东亚大赛的模拟题差的太远了,完全没有挑战性。  回复  更多评论
  

# re: google中国编程挑战赛模拟题 -- CursorPosition(1000分) 2005-12-07 21:30 Merlin Ran
我今天一直在后悔上面的评论,还好看来你没生气。
这题就是让大家熟悉比赛环境的,肯定不代表入围赛的题目难度。真正的题恐怕不会比NewStation更容易。  回复  更多评论
  

# re: google中国编程挑战赛模拟题 -- CursorPosition(1000分) 2005-12-08 00:45 emu
呵呵,对自己有信心,就不会理解成自己现眼了。不过这样的模拟题对没看过以前的题目的人有很强的误导性,都以为1000分就这么好拿,到时就傻眼了。怀疑google想多蒙些人来捧场。
此外这道题我第一次做也是做错了的(现眼了),在系统自动测试的时候才发现,原来位置是从0到n,不是从1到n。所以题目容易也要仔细读题。上次东亚大赛的时候有一道题就是没有搞清楚输出结果是要排序的丢了分。  回复  更多评论
  

# re: google中国编程挑战赛模拟题 -- CursorPosition(1000分) 2005-12-10 00:24 小飞侠
public class CursorPosition {
public static int getPosition(String commonds, int ncount) {
//获取开始查询的位置
int fromIndex1, fromIndex2, fromIndex, position;

fromIndex1 = commonds.lastIndexOf((int)'E');
fromIndex2 = commonds.lastIndexOf((int)'H');
if (fromIndex1 > fromIndex2) {
fromIndex = fromIndex1 >0 ? fromIndex1 : 0;
position = ncount;
} else {
fromIndex = fromIndex2 > 0 ? fromIndex2 : 0;
position = 0;
}

//取字符串的字符,开始进行统计
for (int i = fromIndex + 1; i < commonds.length(); i++) {
System.out.println(commonds.charAt(i));
switch(commonds.charAt(i)) {
case 'L' :
position = (position == 0) ? 0 : --position;
break;
case 'R' :
position = (position == ncount) ? ncount : ++position;
break;
default :
break;
}
}

return position;
}
}   回复  更多评论
  

# re: google中国编程挑战赛模拟题 -- CursorPosition(1000分) 2005-12-10 00:27 小飞侠
//简单的方法
public class CursorPosition {
public int getPosition(String commonds, int ncount) {
   int position = 0;
for (int i = 0; i < commonds.length(); i++) {
switch(commonds.charAt(i)) {
case 'H' :
position = 0;
break;
case 'E' :
position = ncount;
break;
case 'R' :
position = position < ncount ? positon++ : ncount;
break;
case 'L' :
position = position >0 ? position-- : 0;
break;
default :
break;
}
} 

return position;    
  }
}  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: