作者: KSkun

游戏《工程师死绝的世界》题目翻译及题解合集

游戏《工程师死绝的世界》题目翻译及题解合集

游戏地址:拠点 | エンジニアが死滅シタ世界 〜アンドロイドとふたりぼっちで生きろ〜(需要 …

[工程师死绝的世界A1001]有名なプールサイド 翻译

[工程师死绝的世界A1001]有名なプールサイド 翻译

著名的水边 Translation by KSkun 原题:問題「有名なプールサイド」 | …

[工程师死绝的世界B2001]高層タワー 翻译及题解

[工程师死绝的世界B2001]高層タワー 翻译及题解

高塔

Translation by KSkun

原题:問題「高層タワー」 | エンジニアが死滅シタ世界 〜アンドロイドとふたりぼっちで生きろ〜

问题描述

你在把一些单词组合成新的单词。
新单词由N个字符串按先后顺序结合而成。
为了避免新单词过于冗长,需要将前一个单词的末端与后一个单词的前端最长的相同子串合并起来。
例如,样例1中需要合并paiza、apple和letter三个单词,
前两个单词paiza和apple按要求合并后得到了paizapple这个单词。
再合并上后一个单词就得到了paizappletter。

img

注意,必须按从前到后的顺序合并,样例2中合并poh、p、oh时,
poh和p合并得到了pohp,此时再合并oh得到的是pohpoh。
请按照输入的先后顺序合并给出的N个字符串得到新单词。

输入格式

N 
w_1 
w_2 
... 
w_N
  • 第一行包含一个整数N,表示需要合并的单词数量。
  • 接下来的N行中,第i行给出第i个需要合并的单词字符串w_i。
  • 输入共N + 1行,在输入的最后,包含一个换行符。

输出格式

输出N个单词按输入先后顺序结合成的新单词。

条件

  • 2 ≦ N ≦ 100
  • 对于每个给出的单词字符串w_i,都满足以下条件。
    • 1 ≦ w_i的长度 ≦ 100
    • w_i只由半角小写英文字母构成。

输入输出样例

输入输出样例1

输入:

3 
paiza 
apple 
letter

输出:

paizappletter

输入输出样例2

输入:

3 
poh 
p 
oh

输出:

pohpoh

题解

// Code by KSkun, 2019/1
#include <cstdio>
#include <cctype>
#include <cstring>

#include <algorithm>

typedef long long LL;

inline char fgc() {
    static char buf[100000], *p1 = buf, *p2 = buf;
    return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
        ? EOF : *p1++;
}

inline LL readint() {
    LL res = 0, neg = 1; char c = fgc();
    for(; !isdigit(c); c = fgc()) if(c == '-') neg = -1;
    for(; isdigit(c); c = fgc()) res = res * 10 + c - '0';
    return res * neg;
}

inline char readsingle() {
    char c;
    while(!isgraph(c = fgc())) {}
    return c;
}

const int MAXN = 10005;

int n, rlen = 0, len;
char res[MAXN], w[MAXN];

inline bool issame(int len) {
    for(int i = 1; i <= len; i++) {
        if(res[rlen - (len - i)] != w[i]) return false;
    }
    return true;
}

inline int solve(int len) {
    for(int i = std::min(rlen, len); i >= 1; i--) {
        if(issame(i)) return i;
    }
    return 0;
}

int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) {
        scanf("%s", w + 1);
        len = strlen(w + 1);
        int r = solve(len);
        for(int i = 1; i <= len - r; i++) {
            res[rlen + i] = w[r + i];
        }
        rlen += len - r;
    }
    printf("%s", res + 1);
    return 0;
}
[工程师死绝的世界B2002]砂漠の公園 翻译及题解

[工程师死绝的世界B2002]砂漠の公園 翻译及题解

沙漠公园 Translation by KSkun 原题:問題「砂漠の公園」 | エンジニ …

[工程师死绝的世界B2003]隔離された街のゲート 翻译及题解

[工程师死绝的世界B2003]隔離された街のゲート 翻译及题解

被隔离的街道的大门 Translation by KSkun 原题:問題「隔離された街のゲ …

[工程师死绝的世界C3001]荒れ果てたショップ 翻译及题解

[工程师死绝的世界C3001]荒れ果てたショップ 翻译及题解

荒废的商店

Translation by KSkun

原题:問題「荒れ果てたショップ」 | エンジニアが死滅シタ世界 〜アンドロイドとふたりぼっちで生きろ〜

问题描述

你正在整理商店管理系统的文件。
每个文件有编号与之对应,为了让文件的编号看起来比较一致,比较短的数字需要在左边补0至长度相同。
例如,编号的长度为3时,0应该补成000,而4应该补成004,13补成013,144不需要补0因此就是144,诸如此类。
给你三个整数N、A和B。
你需要将区间[A, B]中的整数补0至长度都为N,然后输出他们。
例如,样例1可以表示为下图。
img

在这个样例中,你需要将9、10和11三个数字补成长度为3的统一形式。

  • 9是一个一位数,应该在左边补上2个0,这样才能成为长度为3的数字。
  • 10和11是两位数,应该在左边补上1个0,形成长度为3的数字。

输入格式

N A B
  • 整数N表示补成的数字的长度,A和B表示要补的数字的区间。
  • 在输入的最后,包含一个换行符。

输出格式

将区间[A, B]中的每一个整数i补成长度为N的形式并分别输出他们。
输出的最后应该包含一个换行符。

条件

  • 1 ≦ N ≦ 9
  • 0 ≦ A ≦ B ≦ 5000
  • B的数字位数 ≦ N

输入输出样例

输入输出样例1

输入:

3 9 11

输出:

009 
010 
011

输入输出样例2

输入:

2 0 3

输出:

00 
01 
02 
03

题解

// Code by KSkun, 2019/1
#include <cstdio>
#include <cctype>

#include <algorithm>

typedef long long LL;

inline char fgc() {
    static char buf[100000], *p1 = buf, *p2 = buf;
    return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
        ? EOF : *p1++;
}

inline LL readint() {
    LL res = 0, neg = 1; char c = fgc();
    for(; !isdigit(c); c = fgc()) if(c == '-') neg = -1;
    for(; isdigit(c); c = fgc()) res = res * 10 + c - '0';
    return res * neg;
}

inline char readsingle() {
    char c;
    while(!isgraph(c = fgc())) {}
    return c;
}

int n, a, b;
char fmt[10];

int main() {
    n = readint(); a = readint(); b = readint();
    sprintf(fmt, "%%0%dd\n", n);
    for(int i = a; i <= b; i++) {
        printf(fmt, i);
    }
    return 0;
}
[工程师死绝的世界C3002]機械の総合病院 翻译及题解

[工程师死绝的世界C3002]機械の総合病院 翻译及题解

机械综合医院 Translation by KSkun 原题:問題「機械の総合病院」 |  …

[工程师死绝的世界C3003]学べない学校 翻译及题解

[工程师死绝的世界C3003]学べない学校 翻译及题解

没有学生的学校 Translation by KSkun 原题:問題「学べない学校」 |  …

[工程师死绝的世界D5005]お金が引き出せない銀行 翻译及题解

[工程师死绝的世界D5005]お金が引き出せない銀行 翻译及题解

取不出钱的银行

Translation by KSkun

原题:問題「お金が引き出せない銀行」 | エンジニアが死滅シタ世界 〜アンドロイドとふたりぼっちで生きろ〜

问题描述

你正在编写一个用于从银行存款中取钱的程序。
你知道你的存款n以及要取的钱数w。
取钱时,如果取钱后的余额为负值,则输出error,否则输出余额。

输入格式

n 
w
  • 第一行包含一个数字n,表示银行存款。
  • 第二行包含一个数字w,表示要取的钱数。
  • 在输入的最后,包含一个换行符。

输出格式

如果取钱后的余额为负值,则输出error,否则输出余额。

条件

  • 0 ≦ n ≦ 100,000
  • 0 ≦ w ≦ 100,000
  • n, w都是非负整数

输入输出样例

输入输出样例1

输入:

10000 
1020

输出:

8980

输入输出样例2

输入:

1000 
5000

输出:

error

题解

// Code by KSkun, 2019/1
#include <cstdio>
#include <cctype>
#include <cstring>

#include <algorithm>

typedef long long LL;

inline char fgc() {
    static char buf[100000], *p1 = buf, *p2 = buf;
    return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
        ? EOF : *p1++;
}

inline LL readint() {
    LL res = 0, neg = 1; char c = fgc();
    for(; !isdigit(c); c = fgc()) if(c == '-') neg = -1;
    for(; isdigit(c); c = fgc()) res = res * 10 + c - '0';
    return res * neg;
}

inline char readsingle() {
    char c;
    while(!isgraph(c = fgc())) {}
    return c;
}

int n, w;

int main() {
    scanf("%d%d", &n, &w);
    if(w > n) puts("error");
    else printf("%d\n", n - w);
    return 0;
}
[工程师死绝的世界D5004]錆びついた電波塔 翻译及题解

[工程师死绝的世界D5004]錆びついた電波塔 翻译及题解

生锈了的无线电发射塔 Translation by KSkun 原题:問題「錆びついた電波 …