字母转义
输入的时候注意以十六进制。
int data[128];
for(int i = 0;i<n;i++){
scanf("%x",data+i);
}
输出的时候注意,%x默认以小写输出,%X默认是大写输出16进制。
for(int i = 0;i<n;i++){
scanf("%X",output+i);
}
有一个通讯人,m个朋友圈,下面每一行都是圈里的人,用逗号分开,问最后会有几个人收到通讯人信息。
输入:
jack
3
jack,tom,anny,lucy
tom,danny
jack,lily
输出:6
#include<iostream>
#include<algorithm>
#include<string>
#include<set>
#include<queue>
#include<sstream>
#include<iterator>
using namespace std;
int main() {
string send_man;
getline(cin, send_man);
int num;
cin >> num;
cin.ignore();
set<set<string>> t;
for (int i = 0; i < num; i++) {
string group;
set<string> s;
getline(cin, group);
istringstream ss(group);
while (getline(ss, group, ',')) {
s.insert(group);
}
t.insert(s);
}
set<string> res;
if(res.size() == 0) return 0;
for (auto iter = t.begin(); iter != t.end(); ) {
if (iter->find(send_man) == iter->end()) {
iter++;
}
else {
res = *iter;
iter = t.erase(iter);
break;
}
}
while (!t.empty()) {
bool merge = false;
for (auto iter = t.begin(); iter != t.end();) {
set<string> q;
set_intersection(iter->begin(), iter->end(), res.begin(), res.end(), inserter(q, q.begin()));
if (q.empty()) {
iter++;
}
else {
set_union(iter->begin(), iter->end(), res.begin(), res.end(), inserter(q, q.begin()));
res = q;
iter = t.erase(iter);
merge = true;
break;
}
}
if (!merge) break;
}
cout << res.size();
}