以下の問題のコードであるUVa 10252 - 共通の置換は、C++ 11で作成され、ランダム入力を使用するときはuDebug(https://www.udebug.com/UVa/10252)と同じ出力を返します。UVa 10252プレゼンテーションエラー - 一般的な置換
しかし、たびにUVaオンラインジャッジに送られ、ジャッジは「プレゼンテーションエラー」を返します。私の質問は:なぜ、どのようにコードを受け入れられるように変更することができるのですか?
問題の説明後、以下のコードを入力してください。
問題
は小文字の二つの文字列、AとBとを考えると、そこの部分配列であり、xの順列があるよう 小文字のx最長の文字列を印刷bの サブシーケンスであるxの順列です。
入力
入力ファイルは、入力の複数の行が含まれています。連続する2行が一連の入力を行います。つまり、 入力ファイルの行1と2は入力の集合であり、3行目と4は入力の集合であるということを意味します。ペア の最初の行にはaが含まれ、2番目の行にはbが含まれます。各文字列は別々の行にあり、大文字の小文字は1000〜です。入力、出力の各セットXを含む行について
出力
。複数のxが上記の基準を満たす場合は、アルファベット順に最初の を選択します。
サンプル入力と出力例
https://uva.onlinejudge.org/external/102/10252.pdf 私は両方ここに適切な形式にことができませんでしたので。溶液実測
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <algorithm>
#include <string>
#include <ctype.h>
using namespace std;
void mapear_string(unordered_map<char, int>& letras, string palavra){
for (int i = 0; i < palavra.size(); i++){
letras[palavra.at(i)] += 1;
}
return;
}
int main() {
string entrada;
string palavra_a;
unordered_map <char, int> letras_de_a;
unordered_map <char, int> letras_de_b;
int vezes;
string saida;
while (!cin.eof()){
//limpando os unsorted_maps
letras_de_a.clear();
letras_de_b.clear();
//limpando a string de saida
saida = "";
// ...fazer um unsorted_map com a contagem de letras de cada palavra
getline(std::cin, entrada);
palavra_a = entrada;
sort(palavra_a.begin(), palavra_a.end());
mapear_string(letras_de_a, entrada);
getline(std::cin, entrada);
mapear_string(letras_de_b, entrada);
// para cada letra em a(não repetir)
for (int i = 0; i < palavra_a.size(); i++){
// procurar se a letra existe em b.
if (islower(palavra_a.at(i))) {
if (letras_de_b.count(palavra_a.at(i))){
vezes = min(letras_de_a[palavra_a.at(i)], letras_de_b[palavra_a.at(i)]);
// se existir em b, fazer um min da quantidade em a e em b, e adicionar ao string de saída.
for (int j = 0; j < vezes; j++){
saida += palavra_a.at(i);
}
letras_de_a.erase(palavra_a[i]);
letras_de_b.erase(palavra_a[i]);
}
}
}
// fazer sort da string de saída
//sort(saida.begin(), saida.end());
// imprimir saída
printf("%s", saida.c_str());
cout << "\n";
}
//cout << "\n";
return 0;
}