<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 97,  comments - 93,  trackbacks - 0
    Problem Statement

    Let's say you have a binary string such as the following:
    011100011
    One way to encrypt this string is to add to each digit the sum of its adjacent digits. For example, the above string would become:
    123210122
    In particular, if P is the original string, and Q is the encrypted string, then Q[i] = P[i-1] + P[i] + P[i+1] for all digit positions i. Characters off the left and right edges of the string are treated as zeroes.
    An encrypted string given to you in this format can be decoded as follows (using 123210122 as an example):
    Assume P[0] = 0.
    Because Q[0] = P[0] + P[1] = 0 + P[1] = 1, we know that P[1] = 1.
    Because Q[1] = P[0] + P[1] + P[2] = 0 + 1 + P[2] = 2, we know that P[2] = 1.
    Because Q[2] = P[1] + P[2] + P[3] = 1 + 1 + P[3] = 3, we know that P[3] = 1.
    Repeating these steps gives us P[4] = 0, P[5] = 0, P[6] = 0, P[7] = 1, and P[8] = 1.
    We check our work by noting that Q[8] = P[7] + P[8] = 1 + 1 = 2. Since this equation works out, we are finished, and we have recovered one possible original string.
    Now we repeat the process, assuming the opposite about P[0]:
    Assume P[0] = 1.
    Because Q[0] = P[0] + P[1] = 1 + P[1] = 0, we know that P[1] = 0.
    Because Q[1] = P[0] + P[1] + P[2] = 1 + 0 + P[2] = 2, we know that P[2] = 1.
    Now note that Q[2] = P[1] + P[2] + P[3] = 0 + 1 + P[3] = 3, which leads us to the conclusion that P[3] = 2. However, this violates the fact that each character in the original string must be '0' or '1'. Therefore, there exists no such original string P where the first digit is '1'.
    Note that this algorithm produces at most two decodings for any given encrypted string. There can never be more than one possible way to decode a string once the first binary digit is set.
    Given a String message, containing the encrypted string, return a String[] with exactly two elements. The first element should contain the decrypted string assuming the first character is '0'; the second element should assume the first character is '1'. If one of the tests fails, return the string "NONE" in its place. For the above example, you should return {"011100011", "NONE"}.
    Definition

    Class:
    BinaryCode
    Method:
    decode
    Parameters:
    String
    Returns:
    String[]
    Method signature:
    String[] decode(String message)
    (be sure your method is public)


    Constraints
    -
    message will contain between 1 and 50 characters, inclusive.
    -
    Each character in message will be either '0', '1', '2', or '3'.
    Examples
    0)

    "123210122"
    Returns: { "011100011",  "NONE" }
    The example from above.
    1)

    "11"
    Returns: { "01",  "10" }
    We know that one of the digits must be '1', and the other must be '0'. We return both cases.
    2)

    "22111"
    Returns: { "NONE",  "11001" }
    Since the first digit of the encrypted string is '2', the first two digits of the original string must be '1'. Our test fails when we try to assume that P[0] = 0.
    3)

    "123210120"
    Returns: { "NONE",  "NONE" }
    This is the same as the first example, but the rightmost digit has been changed to something inconsistent with the rest of the original string. No solutions are possible.
    4)

    "3"
    Returns: { "NONE",  "NONE" }

    5)

    "12221112222221112221111111112221111"
    Returns:
    { "01101001101101001101001001001101001",
      "10110010110110010110010010010110010" }

    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.
     1 /**
     2  *
     3  * @author Nicky Qu
     4  * All Rights Reserved. Oct.23th,2007.
     5  */
     6 public class BinaryCode {
     7 
     8     private char[] temp;
     9     private String originalCode0="00";
    10     private String originalCode1="01";
    11 
    12     public String[] decode(String message) {
    13         temp = message.toCharArray();
    14          originalCode0 = Run(temp,originalCode0);
    15          originalCode1 = Run(temp,originalCode1);
    16         return new String[]{originalCode0,originalCode1};
    17     }
    18 
    19     private String Run(char[] temp,String deEncryptedCode) {
    20         int p_i = 0,p_i_1 = 0;
    21         int p_i_add_1 = 0;
    22       for(int i =0;i<temp.length;i++){
    23           p_i_1 =  Character.getNumericValue(deEncryptedCode.charAt(i));
    24           p_i =  Character.getNumericValue(deEncryptedCode.charAt(i+1));
    25           p_i_add_1 =Character.getNumericValue(temp[i]) - p_i - p_i_1;
    26           boolean just = (i==temp.length-1&& (p_i_add_1 != 0);
    27           if(p_i_add_1 < 0||p_i_add_1>2||just){
    28               return "NONE";
    29           }              
    30           deEncryptedCode = deEncryptedCode+ p_i_add_1;          
    31       }
    32         return deEncryptedCode.substring(1,deEncryptedCode.length()-1);
    33     }
    34 }

    posted on 2007-10-23 13:34 wqwqwqwqwq 閱讀(1055) 評(píng)論(1)  編輯  收藏 所屬分類: Data Structure && Algorithm

    FeedBack:
    # re: A Q of Encrypting String
    2007-10-23 19:57 | 曲強(qiáng) Nicky
    public class BinaryCode {

    private String[] result;
    private int[] q;
    private int[] p;

    public String[] decode(String message) {
    result = new String[]{"", ""};
    q = new int[message.length()];
    for (int i = 0; i < q.length; i++) {
    q[i] = Integer.parseInt(String.valueOf(message.charAt(i)));
    }
    for (int j = 0; j < 2; j++) {
    p = new int[q.length];
    p[0] = j;
    result[j] += p[0];
    for (int i = 1; i < q.length; i++) {
    if (i == 1) {
    p[1] = q[0] - p[0];
    } else {
    p[i] = q[i - 1] - p[i - 2] - p[i - 1];
    }
    if (p[i] > 1 || p[i] < 0) {
    result[j] = "NONE";
    break;
    }
    result[j] += p[i];
    }
    for (int i = 0; i < p.length; i++) {
    if (i == 0 && i == p.length - 1) {
    if (p[i] != q[i]) {
    result[j] = "NONE";
    break;
    }
    } else if (i == 0) {
    if (0 + p[i] + p[i + 1] != q[i]) {
    result[j] = "NONE";
    break;
    }
    } else if (i == p.length - 1) {
    if (p[i - 1] + p[i] + 0 != q[i]) {
    result[j] = "NONE";
    break;
    }
    } else {
    if (p[i - 1] + p[i] + p[i + 1] != q[i]) {
    result[j] = "NONE";
    break;
    }
    }
    }
    }
    return result;
    }
    }  回復(fù)  更多評(píng)論
      
    <2007年10月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910




    常用鏈接

    留言簿(10)

    隨筆分類(95)

    隨筆檔案(97)

    文章檔案(10)

    相冊(cè)

    J2ME技術(shù)網(wǎng)站

    java技術(shù)相關(guān)

    mess

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    校園夢(mèng)網(wǎng)網(wǎng)絡(luò)電話,中國(guó)最優(yōu)秀的網(wǎng)絡(luò)電話
    主站蜘蛛池模板: 亚洲av永久中文无码精品综合| 大片免费观看92在线视频线视频 | 中文字幕av无码不卡免费 | 99热亚洲色精品国产88| 国产精品免费看香蕉| 国产一级一毛免费黄片| 2019亚洲午夜无码天堂| 亚洲国产精品国产自在在线| 99久久久国产精品免费牛牛| 国产成人精品日本亚洲语音| 欧洲亚洲国产精华液| 亚洲无线一二三四区手机| 97在线视频免费| 一级毛片**免费看试看20分钟| 亚洲午夜免费视频| 亚洲精品成人a在线观看| 3d动漫精品啪啪一区二区免费| 国产精品亚洲一区二区无码| 久久精品国产亚洲av日韩| 免费女人18毛片a级毛片视频| 最近的中文字幕大全免费8| 一区二区三区免费电影| 亚洲欧美日韩一区二区三区在线| 亚洲男人的天堂www| 日韩免费视频网站| 久久久久久精品成人免费图片| av网站免费线看| 亚洲国产成人久久一区二区三区 | 亚洲精品伊人久久久久| 亚洲综合无码AV一区二区| 成人毛片视频免费网站观看| 国产精品免费无遮挡无码永久视频| 老司机午夜性生免费福利| 亚洲中文字幕久久精品无码A| 亚洲a一级免费视频| 国产av无码专区亚洲国产精品| 女人18特级一级毛片免费视频| 中文字幕免费在线观看| 免费看无码特级毛片| 一区在线免费观看| 一级a性色生活片久久无少妇一级婬片免费放|