vector<string> ipToCIDR(string ip, int range) { auto start = ipToInt(ip); vector<string> result; while (range > 0) { auto mask = max(33 - bitLength(start & ~(start - 1)), 33 - bitLength(range)); result.emplace_back(intToIP(start) + "/" + to_string(mask)); start += 1 << (32 - mask); range -= 1 << (32 - mask); } return result; }
bool PreflateDecoderTask::encode() { PreflatePredictionEncoder pcodec; unsigned modelId = handler.setModel(counter, params); if (!handler.beginEncoding(metaBlockId, pcodec, modelId)) { return false; } for (unsigned i = 0, n = tokenData.size(); i < n; ++i) { tokenPredictor->encodeBlock(&pcodec, i); treePredictor->encodeBlock(&pcodec, i); if (tokenPredictor->predictionFailure || treePredictor->predictionFailure) { return false; } if (lastMetaBlock) { tokenPredictor->encodeEOF(&pcodec, i, i + 1 == tokenData.size()); } } if (lastMetaBlock) { pcodec.encodeNonZeroPadding(paddingBits != 0); if (paddingBits != 0) { unsigned bitsToSave = bitLength(paddingBits); pcodec.encodeValue(bitsToSave, 3); if (bitsToSave > 1) { pcodec.encodeValue(paddingBits & ((1 << (bitsToSave - 1)) - 1), bitsToSave - 1); } } } return handler.endEncoding(metaBlockId, pcodec, uncompressedData.size() - uncompressedOffset); }
//time complexity: O(1) //space complexity: O(1) //2A : missing the recursive part in line 24 caused the first failure int rangeBitwiseAnd(int m, int n) { if (m == 0) { return 0; } if (m == n) { return m; } int len1 = bitLength(m); int len2 = bitLength(n); if (len1 == len2) { int leastNum = 1 << (len1 - 1); return leastNum + rangeBitwiseAnd(m - leastNum, n - leastNum); } else { return 0; } }