Codeforces Round 994 (Div. 2) (D-F)

answer page
还有好多没补,但是既然赛时写出了e就应该去补f,不进则退
这场没开排行榜埋头苦写第一次赛时出e了,也是第一次500名,可喜可贺//(虽然d不会)

D

想了一个n4做法,状态设计为f[i][pos][j][k], 表示第i行必须选第pos个数且当前在位置j且当前行选k个,发现前缀和优化可以从minf[i1][x][jk][x] 转移来(x为可忽略项)
思考能否忽略k。发现可行,状态设计变为必须选择pos在j位置,转移变为从f[i1][x][j1] or f[i][pos1][j1] 转过来, 复杂度对了

#include <bits/stdc++.h>
using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned;
using u128 = unsigned __int128;
constexpr int N = 2e2 + 10;
constexpr i64 inf = 1e18;
#define lowbit(x) (x & (-x))
#define pii pair<int, int>
#define mkp make_pair
#define vi std::vector<i64>
i64 n, k, m;
bool flg[N];
void solve()
{
std::cin >> n >> m >> k;
std::vector<vi> a(n + 1, vi(m + 1)), g(n + 1, vi(m + 1));
vi f(m + 1, inf);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
std:: cin >>a[i][j];
f[1] = 0; // pre
for (int i = 1; i <= n; i++) {
vi tmp(m + 1, inf);
for (int sf = 0; sf < m; sf++) {
vi nw(m + 1, inf);
for (int j = 1; j <= m; j++) {
int _a = a[i][(sf + j - 1) % m + 1];
nw[j] = std::min(nw[j - 1], f[j] + 1ll * sf * k) + _a;
tmp[j] = std::min(tmp[j], nw[j]);
}
}
f = tmp;
}
std::cout << f[m] << '\n';
}
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int T = 1;
std::cin >> T;
while (T--) {
solve();
}
return 0;
}

E

#include <bits/stdc++.h>
using namespace std;
const int N = 2e2 + 10;
#define lowbit(x) (x & (-x))
// #define endl '\n'
#define int long long
#define pii pair<int, int>
#define mkp make_pair
#define LL long long
int n, k, m, mu[N], p[N], tot, C[N], w[N], a[N];
bool flg[N];
int que(int l, int r) {
cout << "? " << l << ' ' << r << endl;
int x; cin >> x;
return x;
}
void solve()
{
cin >> n;
int l = 1, r = n, mid = (l + r) / 2;
int ql = que(l, mid), qr;
int q1 = ql; // 1 zuo
if (ql) r = mid;
else l = mid + 1;
mid = (l + r) / 2;
ql = que(l, mid), qr = que(mid + 1, r);
// mid < n / 2
if (ql == qr) {
qr = l;
if (ql) r = mid;
else l = mid + 1;
mid = (l + r) / 2;
while(l < r) {
ql = que(qr, mid);
if (ql) r = mid;
else l = mid + 1;
mid = (l + r) / 2;
}
cout << "! "<< mid - qr + 1 << endl;
}
else {
if (q1) {
l = n / 2 + 1, r = n, mid = (l + r) / 2;
while(l < r) {
ql = que(1, mid);
if (ql) l = mid + 1;
else r = mid;
mid = (l + r) / 2;
}
cout <<"! "<< mid << endl;
}
else {
l = 1, r = n / 2, mid = (l + r + 1) / 2;
while(l < r) {
ql = que(mid, n);
if (ql) r = mid - 1;
else l = mid;
mid = (l + r + 1) / 2;
}
cout << "! "<<n - mid + 1 << endl;
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T = 1;
cin >> T;
while (T--) {
solve();
}
return 0;
}

F

posted @   lyrrr  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示