⬆︎
×

[PAT-A] 1164 Good in C

Hyplus目录

Java

测试点3超时

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    static char[][][] letters = new char[26][7][5];
    static boolean isFirstWord = true;

    static void printWord(String word) {
        if (word.isEmpty()) return;

        if (isFirstWord) {
            isFirstWord = false;
        } else {
            System.out.println();
        }

        char[][] result = new char[7][60];
        int width = 0;

        for (int k = 0; k < word.length(); k++) {
            for (int i = 0; i < 7; i++) {
                for (int j = 0; j < 5; j++) {
                    int letterIndex = word.charAt(k) - 'A';
                    result[i][k * 6 + j] = letters[letterIndex][i][j];
                    width = k * 6 + j;
                }
            }
        }

        for (int k = 1; k < word.length(); k++) {
            for (int i = 0; i < 7; i++) {
                result[i][k * 6 - 1] = ' ';
            }
        }

        for (int i = 0; i < 7; i++) {
            for (int j = 0; j <= width; j++) {
                System.out.print(result[i][j]);
            }
            System.out.println();
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        for (int a = 0; a < 26; a++) {
            for (int i = 0; i < 7; i++) {
                String line = br.readLine();
                for (int j = 0; j < 5; j++) {
                    letters[a][i][j] = line.charAt(j);
                }
            }
        }

        StringBuilder curWord = new StringBuilder();
        int c;
        while ((c = br.read()) != -1) {
            char ch = (char) c;
            if (Character.isUpperCase(ch)) {
                curWord.append(ch);
            } else {
                printWord(curWord.toString());
                curWord.setLength(0);
            }
        }

        printWord(curWord.toString());
    }
}

C++

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 120;

char g[27][8][6];
bool is_first = true;

void print(string word) {
    if (word.empty()) return;

    if (is_first) is_first = false;
    else cout << endl;

    char res[7][60] = {0};
    int width = 0;
    for (int k = 0; k < (int) word.size(); ++k)
        for (int i = 0; i < 7; ++i)
            for (int j = 0; j < 5; ++j) {
                int a = word[k] - 'A';
                res[i][k * 6 + j] = g[a][i][j];
                width = k * 6 + j;
            }

    for (int k = 1; k < word.size(); ++k)
        for (int i = 0; i < 7; ++i)
            res[i][k * 6 - 1] = ' ';

    for (int i = 0; i < 7; ++i) {
        for (int j = 0; j <= width; ++j)
            cout << res[i][j];
        cout << endl;
    }
}

int main() {
    for (int a = 0; a < 26; ++a)
        for (int i = 0; i < 7; ++i)
            for (int j = 0; j < 5; ++j)
                cin >> g[a][i][j];

    string word;
    char c;
    while ((c = getchar()) != -1) {
        if (isupper(c)) word += c;
        else {
            print(word);
            word.clear();
        }
    }

    print(word);

    return 0;
}

发表评论