乱搞做法求 hack
查看原帖
乱搞做法求 hack
351012
YuzhenQin楼主2024/5/14 08:24
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

ll arrsum(ll a, ll delta, ll n) {
	return (2 * a + (n - 1) * delta) * n / 2;
}

int main(void) {
	ll n, k;
	cin >> n >> k;
	
	ll ans = 0;
	for(ll i = 1; i <= min(n, (ll)sqrt(k)); i++)
		ans += k % i;
		
	if(n > sqrt(k)) {
		ll pos = sqrt(k);
		for(ll i = round(sqrt(k)) - 1; i >= 1; i--) {
			if(pos + k / i - k / (i + 1) <= n) {
				ans += arrsum(k % i, i, k / i - k / (i + 1));
				pos += k / i - k / (i + 1);
			} else {
				ans += arrsum(k % i, i, k / i - k / (i + 1))
					- arrsum(k % i, i, pos + k / i - k / (i + 1) - n);
				break;
			}
		}
		
		if(n > k)
			ans += k * (n - k);
	} 
	
	cout << ans << endl;	
	
	return 0;
} 
2024/5/14 08:24
加载中...