第一题:
十分钟ac
#include <iostream> #include <vector> #include <unordered_map> #include <algorithm> using namespace std; int main() { int t; cin >> t; while (t-- > 0){ int n; cin >> n; vector<int> data; unordered_map<int, bool> find; while (n-- > 0){ int tmp; cin >> tmp; data.push_back(tmp); //find[tmp] = true; } int ans = 0; sort(data.begin(), data.end()); for (int i = data.size() - 1; i >= 0; --i) { int tmp = data[i]; if (find.count(tmp + 1) != 1){ find[tmp + 1] = true; find.erase(tmp); }else{ find[tmp] = true; } } cout << find.size() << endl; } }
第二题:
十分钟用递归写完,结果递归层数超出,又改成栈去做,又超出内存限制,怼了50分钟没怼过去,考完把舍友当小黄鸭讲题目发现一个判断条件粗心写错了,心态炸裂,这里放出正确的:
#include <iostream> using namespace std; double cal(int a, int b); int main() { int t; cin >> t; while (t-- > 0){ int origin; cin >> origin; cout << cal(origin, origin) << endl; } } double cal(int a, int b){ if (a > 0 && b <= 0){ return 0; }else if (a <= 0 && b <= 0){ return 0.5; }else if (a <= 0 && b > 0){ return 1; }else{ return 0.25 * cal(a - 100, b) + 0.25 * cal(a - 75, b - 25) + 0.25 * cal(a - 50, b - 50) + 0.25 * cal(a - 25, b - 75); } }
全部评论
(3) 回帖