#3839: 這樣寫為何會RE


romeo0915 (PeacePan)

學校 : 不指定學校
編號 : 8533
來源 : [218.161.10.39]
最後登入時間 :
2018-07-16 17:23:14
d517. 文字抄寫 I | From: [218.163.88.233] | 發表日期 : 2010-06-07 21:31

#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
using namespace std;

int main(void){
    int n;
    int top = 1;
    int *words = new int[456976]; //最大為26的4次方
    memset(words, 0, 456976 * sizeof(int)); //初始值為0
    while (scanf("%d", &n) == 1){
        for (int i = 0; i < n; i++){
            char wd[5] = {0};
            wd[0] = getchar();
            wd[1] = getchar();
            wd[2] = getchar();
            wd[3] = getchar();
            getchar();

            //將字串轉成26進制的數字以方便搜尋
            int idx = (wd[0] - 'a' + 1) + (wd[1] - 'a' + 1) * 26 +
                (wd[2] - 'a' + 1) * (26 * 26) +
                (wd[3] - 'a' + 1) * (26 * 26 * 26);
            if (words[idx] == 0){
                printf("New! %d\n", top);
                words[idx] = top;
                top++;
            }
            else
                printf("Old! %d\n", words[idx]);
        }
    }
    delete words;
    return 0;
}

 懇請高手提示一下ˊ.ˋ

 
#3842: Re:這樣寫為何會RE


sdyy (sdyy)

學校 : 國立交通大學
編號 : 5598
來源 : [59.125.101.61]
最後登入時間 :
2011-03-16 15:32:13
d517. 文字抄寫 I | From: [60.248.161.9] | 發表日期 : 2010-06-08 10:46

#include
#include
#include
#include
using namespace std;

int main(void){
    int n;
    int top = 1;
    int *words = new int[456976]; //最大為26的4次方
    memset(words, 0, 456976 * sizeof(int)); //初始值為0
    while (scanf("%d", &n) == 1){
        for (int i = 0; i < n; i++){
            char wd[5] = {0};
            wd[0] = getchar();
            wd[1] = getchar();
            wd[2] = getchar();
            wd[3] = getchar();
            getchar();

            //將字串轉成26進制的數字以方便搜尋
            int idx = (wd[0] - 'a' + 1) + (wd[1] - 'a' + 1) * 26 +
                (wd[2] - 'a' + 1) * (26 * 26) +
                (wd[3] - 'a' + 1) * (26 * 26 * 26);
            if (words[idx] == 0){
                printf("New! %d\n", top);
                words[idx] = top;
                top++;
            }
            else
                printf("Old! %d\n", words[idx]);
        }
    }
    delete words;
    return 0;
}

 懇請高手提示一下ˊ.ˋ

wd[] - 'a' + 1 炸啦

矩陣要從0開始 

 
#3843: Re:這樣寫為何會RE


romeo0915 (PeacePan)

學校 : 不指定學校
編號 : 8533
來源 : [218.161.10.39]
最後登入時間 :
2018-07-16 17:23:14
d517. 文字抄寫 I | From: [218.163.88.233] | 發表日期 : 2010-06-08 12:16

#include
#include
#include
#include
using namespace std;

int main(void){
    int n;
    int top = 1;
    int *words = new int[456976]; //最大為26的4次方
    memset(words, 0, 456976 * sizeof(int)); //初始值為0
    while (scanf("%d", &n) == 1){
        for (int i = 0; i < n; i++){
            char wd[5] = {0};
            wd[0] = getchar();
            wd[1] = getchar();
            wd[2] = getchar();
            wd[3] = getchar();
            getchar();

            //將字串轉成26進制的數字以方便搜尋
            int idx = (wd[0] - 'a' + 1) + (wd[1] - 'a' + 1) * 26 +
                (wd[2] - 'a' + 1) * (26 * 26) +
                (wd[3] - 'a' + 1) * (26 * 26 * 26);
            if (words[idx] == 0){
                printf("New! %d\n", top);
                words[idx] = top;
                top++;
            }
            else
                printf("Old! %d\n", words[idx]);
        }
    }
    delete words;
    return 0;
}

 懇請高手提示一下ˊ.ˋ

wd[] - 'a' + 1 炸啦

矩陣要從0開始 

沒想到居然是錯在這...感激不盡...經過多次的WA後AC了...Orz
 
ZeroJudge Forum