tle on test 26已老实求调
查看原帖
tle on test 26已老实求调
909961
nectarl楼主2024/9/10 21:41
ll dp[701][701];
ll ways[701];

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	ll sst, type;
	cin >> sst >> type;
	if (type == 2)cin >> md;
	dp[0][0] = 1;
	ways[0] = 1;
	rep(i, 1, 700) {
		rep(j, 1, i) {
			dp[i][j] = dp[i - 1][j - 1] + (i - j >= 0 ? dp[i - j][j] : 0);
			dp[i][j] %= md;
			ways[i] += dp[i][j];
			ways[i] %= md;
		}
	}
	vector<vector<ll>>tmp(4, vector<ll>(701, 0));
	rep(k, 0, 700)
	{
		tmp[0][k] = ways[k];
	}
	rep(len, 1, 3) {
		per(k, 0, 700)
		{
			per(kk, 0, k) {
				tmp[len][k] += tmp[len - 1][kk] * ways[k - kk] % md;
				tmp[len][k] %= md;
			}
		}
	}
	while (sst--) {
		g(n);
		ll  ans = INF;
		per(i, 1, n) {
			if (i * i < n)break;
			ll j = up(n, i);
			ans = min(ans, j + i);
		}
		ll ret = 0;
		per(i, 1, n) {
			if (i * i < n)break;
			ll j = up(n, i);
			if (j + i == ans) {
				ll t = min(i, j) - 1;
				ret += tmp[3][i * j - n] * (i == j ? 1 : 2) % md;
				ret %= md;
			}
		}
		if (type == 2)printf("%lld %lld\n", ans * 2, ret);
		else {
			per(i, 1, n) {
				if (i * i < n)break;
				ll j = up(n, i);
				ll res = n;
				if (i + j == ans) {
					cout << i << " " << j << "\n";
					rep(ii, 1, i) {
						rep(jj, 1, j) {
							if (res) {
								cout << '#';
								res--;
							}
							else cout << '.';
						}
						cout << '\n';
					}
					break;
				}
			}
		}
	}
}
2024/9/10 21:41
加载中...