由于簡(jiǎn)書(shū)系統(tǒng)6.3號(hào)就開(kāi)始系統(tǒng)維護(hù)精续,到6.6日0點(diǎn)才恢復(fù)涌萤,無(wú)法發(fā)布文章
快樂(lè).jpg
/*
“單身狗”是中文對(duì)于單身人士的一種愛(ài)稱嚣潜。本題請(qǐng)你從上萬(wàn)人的大型派對(duì)中找出落單的客人履澳,以便給予特殊關(guān)愛(ài)嚣伐。
輸入格式:
輸入第一行給出一個(gè)正整數(shù) N(≤ 50 000),是已知夫妻/伴侶的對(duì)數(shù)澎粟;隨后 N 行蛀序,每行給出一對(duì)夫妻/伴侶——為方便起見(jiàn)欢瞪,每人對(duì)應(yīng)一個(gè) ID 號(hào)活烙,為 5 位數(shù)字(從 00000 到 99999),ID 間以空格分隔遣鼓;之后給出一個(gè)正整數(shù) M(≤ 10 000)啸盏,為參加派對(duì)的總?cè)藬?shù);隨后一行給出這 M 位客人的 ID骑祟,以空格分隔回懦。題目保證無(wú)人重婚或腳踩兩條船。
輸出格式:
首先第一行輸出落單客人的總?cè)藬?shù)次企;隨后第二行按 ID 遞增順序列出落單的客人怯晕。ID 間用 1 個(gè)空格分隔,行的首尾不得有多余空格缸棵。
輸入樣例:
3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333
輸出樣例:
5
10000 23333 44444 55555 88888
*/
#include <bits/stdc++.h>
using namespace std;
using gg = long long;
int main() {
ios::sync_with_stdio(false);
unordered_map<gg, gg> um; //記錄配偶ID
gg n, a, b;
cin >> n;
while (n--) {
cin >> a >> b;
um[a] = b;
um[b] = a;
}
cin >> n;
set<gg> s; //記錄是否出現(xiàn)在派對(duì)上并排序
while (n--) {
cin >> a;
//如果該客人沒(méi)有配偶;如果有配偶在set中查找是否包含其配偶的ID舟茶,如果不包含;將該客人的ID號(hào)加入set中
if (not um.count(a) or not s.count(um[a])) {
s.insert(a);
} else {
s.erase(um[a]);//如果包含,在set中刪除其配偶的ID
}
}
cout << s.size() << '\n' << setfill('0');
for (auto i = s.begin(); i != s.end(); ++i) {
cout << (i == s.begin() ? "" : " ") << setw(5) << *i;
}
return 0;
}
總結(jié):
(1)set復(fù)習(xí)堵第,set內(nèi)部無(wú)重復(fù)元素吧凉,且按升序順序排序
(2)unordered_map復(fù)習(xí),依舊是老一套映射
1067
/*
當(dāng)你試圖登錄某個(gè)系統(tǒng)卻忘了密碼時(shí)踏志,系統(tǒng)一般只會(huì)允許你嘗試有限多次阀捅,當(dāng)超出允許次數(shù)時(shí),賬號(hào)就會(huì)被鎖死针余。本題就請(qǐng)你實(shí)現(xiàn)這個(gè)小功能饲鄙。
輸入格式:
輸入在第一行給出一個(gè)密碼(長(zhǎng)度不超過(guò) 20 的、不包含空格圆雁、Tab忍级、回車的非空字符串)和一個(gè)正整數(shù) N(≤ 10),分別是正確的密碼和系統(tǒng)允許嘗試的次數(shù)摸柄。隨后每行給出一個(gè)以回車結(jié)束的非空字符串颤练,是用戶嘗試輸入的密碼。輸入保證至少有一次嘗試。當(dāng)讀到一行只有單個(gè) # 字符時(shí)嗦玖,輸入結(jié)束患雇,并且這一行不是用戶的輸入。
輸出格式:
對(duì)用戶的每個(gè)輸入宇挫,如果是正確的密碼且嘗試次數(shù)不超過(guò) N苛吱,則在一行中輸出 Welcome in,并結(jié)束程序器瘪;如果是錯(cuò)誤的翠储,則在一行中按格式輸出 Wrong password: 用戶輸入的錯(cuò)誤密碼;當(dāng)錯(cuò)誤嘗試達(dá)到 N 次時(shí)橡疼,再輸出一行 Account locked援所,并結(jié)束程序。
輸入樣例 1:
Correct%pw 3
correct%pw
Correct@PW
whatisthepassword!
Correct%pw
#
輸出樣例 1:
Wrong password: correct%pw
Wrong password: Correct@PW
Wrong password: whatisthepassword!
Account locked
輸入樣例 2:
cool@gplt 3
coolman@gplt
coollady@gplt
cool@gplt
try again
#
輸出樣例 2:
Wrong password: coolman@gplt
Wrong password: coollady@gplt
Welcome in
*/
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
string c,in;
int n;
cin>>c>>n;//讀取密碼和輸入次數(shù)
cin.get();//吸取換行符
while(getline(cin,in) and in!= "#"){
if(in==c){
cout<<"Welcome in\n";
break;
}
cout<< "Wrong password: " << in << '\n';
if(--n == 0){//達(dá)到上限
cout << "Account locked\n";
break;
}
}
return 0;
}
總結(jié):
string in欣除;
cin.get();//吸取換行符
getline(cin,in)住拭;//按行讀取字符串