int min = INF; int not_eat = 0; int sum = 0; for (int i = l; i < l + n; ++i) { sum += i; if (min > abs(i)) { min = abs(i); not_eat = i; } } cout << sum - not_eat << endl;
unsignedlonglong a, aa, b; unsignedlong c, d, cc, dd; cin >> aa >> b >> c >> d; a = aa - 1; unsignedlonglong gcd; unsignedlonglong r; cc = c, dd = d; r = cc % dd; while (r != 0) { cc = dd; dd = r; r = cc % dd; } gcd = c * d / dd; unsignedlonglong bdivc, bdivd, bdivgcd, divb; unsignedlonglong adivc, adivd, adivgcd, diva; bdivc = b / c, bdivd = b / d, bdivgcd = b / gcd; adivc = a / c, adivd = a / d, adivgcd = a / gcd;
divb = b - (bdivc + bdivd - bdivgcd); diva = a - (adivc + adivd - adivgcd);
cout << (divb - diva) << endl;
D問題
0から時間がスタートします.N個のタスクがあり,締め切り時間B_iまでに,時間A_iかかるタスクたち(1 <= i <= N)をスケジューリングできますか?という問題です.自分はEDF(Earliest Deadline First)と呼ばれる締切時間優先のアルゴリズムで解きましたが,どうやらそれで正しかったようです(本当にこれでいいのかわからず,DMやRMみたいな他のアルゴリズムもあるので調べていて時間を食いました).
int n, k; cin >> n >> k; int max = (n - 1) * (n - 2) / 2; if (k > max) { cout << -1 << endl; } else { cout << (n - 1) + (max - k) << endl; for (int i = 0; i < n - 1; ++i) { cout << 1 << " " << i + 2 << endl; } int it = max - k; int begin = 2, end = begin + 1; while (it > 0) { cout << begin << " " << end << endl; end++; if (end > n) { begin++; end = begin + 1; } it--; } }