CSUOJ 1226 ACM小組的內戰

2021-08-03 17:22:14 字數 2028 閱讀 9546

description

acm小組最近開始出現一些內部矛盾,主要原因是samsara,sowicm與gestapolur對小組的命名產生了分歧,但是samsara和 sowicm是絕對不會屈服於gestapolur,所以他們暗中聯絡怎樣打敗gestapolur,但是為了不讓gestapolur發現他們的目的, 他們希望會程式設計的你用他們的規則對資訊進行加密,以利於他們更完美的戰勝gestapolur。

input

輸入包含約100組資料,每組資料報括四行,第一行和第二行有兩個長度相同的字串s1和s2,分別表示明文到密文的對應關係,第一行為明文本串s1, 第二行為對應加密關係字串s2,第三行為需要加密的明文本串s3,第四行為需要解密的密文字串s4。 (1<=length(s1)=length(s2),length(s3),length(s4)<255)

讀入以eof結束。

output

每組資料輸出兩行,每組第一行輸出s3對應的密文字串,第二行輸出s4對應的明文本串,對每一行輸出,如果出現未給出的明文到密文的對應關係或者對應關係有誤(乙個明文對應多個密文或多個明文對應乙個密文)就輸出「wrong」(不包括引號)。

sample input

abcde

fghij

anc

fhi

sample output

wrong

acd

hint

資料中給出所有字串只包含數字及大小寫字母。

source

csu monthly 2011 dec.

ac**:

#include

#include

#include

using

namespace

std;

int main()

for (string::size_type i = 0; i != s3.size(); i++)

}for (string::size_type i = 0; i != s4.size(); i++)

}cout

<< a1 << endl;

cout

<< a2 << endl;

a1.clear();

a2.clear();

}return

0;}

思路分析:

用四個string存四個輸入,兩個bool陣列分別處理明文和密文中的重複字元。

兩個輸出實際上是等價的,能解決第乙個輸出,第二個輸出也能採用同樣的方法。

以找出s3對應的輸出為例:

通過string的find函式和rfind函式來判斷s1的當前字元是否有重複。如果重複,兩函式返回的索引值必然是不相等的。然後判斷s2在兩個索引值的字元是否相同,如果不同,說明是「真的」出現了一對多的情況,對該字元進行標記。

在求s3對應的輸出a1時,先用find函式判斷當前s3中的字元是否存在於s1中,且是否被標記。如果存在且未被標記就將s2中對應位置的字元存入a1中。只要任一條件不滿足,a1即為wrong。

s2和s4同理。

這題一開始分析的不是很清楚,主要是這段話:

對每一行輸出,如果出現未給出的明文到密文的對應關係或者對應關係有誤(乙個明文對應多個密文或多個明文對應乙個密文)就輸出「wrong」(不包括引號)。

一開始的想法是只要s1中出現重複字元s3對應的輸出就給wrong,s2、s4同理。交完果斷wa了。之後想只要s3中出現的字元在s1中不重複,就能輸出對應密文,s2、s4同理。依然是wa。交到懷疑人生後拿別人的ac**測試了一遍終於發現了隱藏的問題:即使s3中出現了s1裡的重複字元,也有可能不輸出wrong。只要重複字元對應的密文也是相同的即可,例如dd對ii。

估計我還需要重新學學語文orz

acm小組的貪吃蛇

最近acm小組養了一條貪食蛇,他們把它養在乙個可看成二維空間的盒子裡 因為它不會向高處爬嘛 今天小組裡的人都不知道出去幹什麼了,只留了n個食物 在箱子裡,但是它又必須按照小組成員給出的1.n的順序將食物吃完,貪食蛇的行進方式只能是向前,向後,向左,或者向右,而不能斜著走。請你幫它計算一 下它吃完這些...

ACM小組的成績排名

為了保證每位acmer學習的進度,檢驗其學習成果,每隔一段時間就要進行一次內部測驗。samsara被逼迫去評測,並且要給每個人乙個分數,自然作為弱菜的他是沒有時間和精力來進行排名統計了,希望會程式設計的你能幫他輸出前三名的成績。input 輸入包含若干組資料,每組資料都有兩行,第一行乙個正整數n 3...

ACM小組的古怪象棋

acm小組的samsara和staginner對中國象棋特別感興趣,尤其對馬 可能是因為這個棋子的走法比較多吧 的使用進行深入研究。今天他們又在 構思乙個古怪的棋局 假如samsara只有乙個馬了,而staginner又只剩下乙個將,兩個棋子都在棋盤的一邊,馬不能出這一半棋盤的範圍,另外這 一半棋盤...