#include <iostream>
typedef unsigned int ULONG;
/**
* @brief 纠缠基本检查
* @param n 数据块
* @param m 校验块
* @param k 最多宕机的dn数
* @param t 在线Dn数
*/
void CheckEc2(ULONG n, ULONG m, ULONG k, ULONG t)
{
if (t >= (n + m))
{
// dn够多,每次分配n+m个, 每个dn上分配1个
if (k * 1 <= m)
{
std::cout << "dn num: " << (n+m) << ", data num: " << 1 << std::endl;
}
else
{
std::cout << "invalid" << std::endl;
}
}
else
{
// dn数目小于 n + m个, 先是每个Dn上有a个,再有b个Dn上+1
ULONG a = (n + m) / t;
ULONG b = (n + m) % t;
if (k <= b)
{
if (k * (a + 1) <= m)
{
std::cout << "dn num: " << b << ", data num: " << a + 1 << std::endl;
std::cout << "dn num: " << (t - b) << ", data num: " << a << std::endl;
}
else
{
std::cout << "invalid" << std::endl;
}
}
else if (k > b)
{
ULONG ulNum = (a + 1) * b + (k - b) * a;
if (ulNum <= m)
{
std::cout << "dn num: " << b << ", data num: " << a + 1 << std::endl;
std::cout << "dn num: " << (t - b) << ", data num: " << a << std::endl;
}
else
{
std::cout << "invalid" << std::endl;
}
}
}
return;
}
int main(int argc, const char * argv[])
{
// insert code here...
CheckEc2(4, 2, 2, 5);
return 0;
}
纠删检查代码
最新推荐文章于 2023-06-06 08:59:24 发布