简单的太简单,难得太难,几乎没得挣扎,早早交卷去吃饭。
1.1
找的1 2 3
,3 4 5
里边的相同的数,力扣No.1 two sum的变形。
int n, p, q; cin >> n >> p >> q; unordered_set<int> S; for (int i = 0, tmp = 0; i < p; ++i) { cin >> tmp; S.emplace(tmp); } int same = 0; for (int j = 0, tmp = 0; j < q; ++j) { cin >> tmp; if (S.find(tmp) != S.end()) same++; } printf("%d %d %d", p - same, q - same, same);
1.2
AAAAaa,可以任意反转大小写,输出使得大小写相等的一个数。
char c; int count = 0, size = 0; while ((c = getchar()) != EOF) { if (c >= 'A' && c <= 'Z') ++count; ++size; } cout << abs(count - size / 2);
1.3
异或,题目比较复杂,简单来说就是一串输入异或,然后再异或上一个矩阵,这个要怎么化简我还真不知道,过了55%。
uint32_t k; cin >> k; uint32_t ans = 0; for (int i = 1; i <= k; ++i) { for (int j = 1; j <= i; ++j) { ans ^= (i % j); } if ((k - i) % 2 == 1) ans ^= i; } for (uint32_t i = 0, tmp; i < k; ++i) { cin >> tmp; ans ^= tmp; } cout << ans;
1.4
根据给的数字生成一棵树,这颗树的每个节点只能由2个孩子或者0个孩子,问是否能成功。例如1 1 3
就可以,前两个作为第三个数的孩子即可,但是1 2
就不行,因为2这个节点必须有两个孩子。
不会做,骗了20%+。
2
单独的一个题,不知道这是什么操作,看着花里胡哨,就是LRU。
list<uint32_t> l; unordered_map<uint32_t, list<uint32_t>::iterator> dict; uint32_t m; cin >> m; for (uint32_t i = 0, tmp; i < m; ++i) { cin >> tmp; if (dict.find(tmp) != dict.end()) { l.erase(dict[tmp]); l.emplace_front(tmp); dict[tmp] = l.begin(); } else { l.emplace_front(tmp); dict.emplace(tmp, l.begin()); } } for (auto p = l.begin(); p != l.end(); ++p) { cout << *p; }
全部评论
(3) 回帖