A

讨论三种情况,不换/全换成0/全换成1 ,取一个花费最小值


#include <bits/stdc++.h>
using namespace std;
const int N = 1000 + 20; int n, c0, c1, h;
char str[N]; int main()
{
int T;
scanf("%d", &T);
while(T -- )
{
scanf("%d%d%d%d%s", &n, &c0, &c1, &h, str);
int a = 0, b = 0;
for(int i = 0; i < n; ++ i)
if(str[i] == '0') a ++;
else b ++;
int res = 1e9;
res = min(res, n * c0 + h * b);
res = min(res, n * c1 + h * a);
res = min(res, c0 * a + c1 * b);
printf("%d\n", res);
}
return 0;
}

B

排序之后,从\(n \times k - \dfrac{n}{2}\)开始取,每隔\(\dfrac{n}{2}\)取一个,取\(k\)个即可


#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1000 + 20; int n, k, a[N * N]; int main()
{
int T;
scanf("%d", &T);
while(T -- )
{
scanf("%d%d", &n, &k);
for(int i = 1; i <= n * k; ++ i) scanf("%d", &a[i]);
sort(a + 1, a + n * k + 1);
LL res = 0;
for(int i = n * k - n / 2, j = 1; j <= k; i -= n / 2 + 1, ++ j)
res += a[i];
printf("%lld\n", res);
}
return 0;
}

C1/C2

按行处理,处理前\(n - 2\)行,最后\(2\)行按列处理,处理到\(m - 2\)列,最后\(4\)个格子讨论即可.


#include <bits/stdc++.h>
using namespace std;
const int N = 100 + 5; int n, m;
int a[N][N]; struct zt
{
int a, b, c, d, e, f;
};
vector<zt> vec; int main()
{
int T;
scanf("%d",&T);
while(T --)
{
vec.clear();
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++ i)
for(int j = 1; j <= m; ++ j)
scanf("%1d", &a[i][j]);
for(int i = 1; i <= n - 2; ++ i)
for(int j = 1; j <= m; ++ j)
if(a[i][j])
{
vec.push_back((zt){i, j, i + 1, j, i + 1, j < m ? j + 1 : j - 1});
a[i][j] ^= 1; a[i + 1][j] ^= 1; a[i + 1][j < m ? j + 1 : j - 1] ^= 1;
}
for(int j = 1; j <= m - 2; ++ j)
for(int i = n - 1; i <= n; ++ i)
if(a[i][j])
{
vec.push_back((zt){i, j, i, j + 1, i < n ? i + 1 : i - 1, j + 1});
a[i][j] ^= 1; a[i][j + 1] ^= 1; a[i < n ? i + 1 : i - 1][j + 1] ^= 1;
}
int num = a[n - 1][m - 1] + a[n - 1][m] + a[n][m - 1] + a[n][m];
if(num == 1)
{
if(a[n][m])
{
vec.push_back((zt){n, m, n, m - 1, n - 1, m - 1});
vec.push_back((zt){n, m, n, m - 1, n - 1, m});
vec.push_back((zt){n, m, n - 1, m, n - 1, m - 1});
}
if(a[n - 1][m])
{
vec.push_back((zt){n - 1, m, n - 1, m - 1, n, m - 1});
vec.push_back((zt){n - 1, m, n - 1, m - 1, n, m});
vec.push_back((zt){n - 1, m, n, m, n, m - 1});
}
if(a[n][m - 1])
{
vec.push_back((zt){n, m - 1, n - 1, m - 1, n - 1, m});
vec.push_back((zt){n, m - 1, n - 1, m - 1, n, m});
vec.push_back((zt){n, m - 1, n, m, n - 1, m});
}
if(a[n - 1][m - 1])
{
vec.push_back((zt){n - 1, m - 1, n, m - 1, n, m});
vec.push_back((zt){n - 1, m - 1, n, m - 1, n - 1, m});
vec.push_back((zt){n - 1, m - 1, n - 1, m, n, m});
}
}
if(num == 2)
{
if(a[n - 1][m - 1] && a[n - 1][m])
{
vec.push_back((zt){n - 1, m - 1, n, m - 1, n, m});
vec.push_back((zt){n, m - 1, n, m, n - 1, m});
}
if(a[n][m - 1] && a[n][m])
{
vec.push_back((zt){n, m - 1, n - 1, m - 1, n - 1, m});
vec.push_back((zt){n, m, n - 1, m, n - 1, m - 1});
}
if(a[n - 1][m - 1] && a[n][m - 1])
{
vec.push_back((zt){n - 1, m - 1, n - 1, m, n, m});
vec.push_back((zt){n, m - 1, n - 1, m, n, m});
}
if(a[n - 1][m] && a[n][m])
{
vec.push_back((zt){n - 1, m, n - 1, m - 1, n, m - 1});
vec.push_back((zt){n, m, n, m - 1, n - 1, m - 1});
}
if(a[n - 1][m - 1] && a[n][m])
{
vec.push_back((zt){n - 1, m - 1, n - 1, m, n, m - 1});
vec.push_back((zt){n, m, n - 1, m, n, m - 1});
}
if(a[n][m - 1] && a[n - 1][m])
{
vec.push_back((zt){n - 1, m, n - 1, m - 1, n, m});
vec.push_back((zt){n, m - 1, n - 1, m - 1, n, m});
}
}
if(num == 3)
{
vector<int> tmp;
if(a[n][m]) tmp.push_back(n), tmp.push_back(m);
if(a[n - 1][m - 1]) tmp.push_back(n - 1), tmp.push_back(m - 1);
if(a[n - 1][m]) tmp.push_back(n - 1), tmp.push_back(m);
if(a[n][m - 1]) tmp.push_back(n), tmp.push_back(m - 1);
vec.push_back((zt){tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5]});
}
if(num == 4)
{
vec.push_back((zt){n - 1, m - 1, n - 1, m, n, m - 1});
vec.push_back((zt){n, m, n, m - 1, n - 1, m - 1});
vec.push_back((zt){n, m, n, m - 1, n - 1, m});
vec.push_back((zt){n, m, n - 1, m, n - 1, m - 1});
}
printf("%d\n", vec.size());
for(int i = 0; i < vec.size(); ++ i)
printf("%d %d %d %d %d %d\n", vec[i].a, vec[i].b, vec[i].c, vec[i].d, vec[i].e, vec[i].f);
}
return 0;
}

E

线段树,维护一个min和max和区间和,利用单调不增的性质进行修改和查询


#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5 + 10; int n, m, w[N];
struct Node
{
int l, r;
LL maxv, minv, sum, lazy;
}tr[N * 4]; void pushup(int u)
{
tr[u].maxv = max(tr[u << 1].maxv, tr[u << 1 | 1].maxv);
tr[u].minv = min(tr[u << 1].minv, tr[u << 1 | 1].minv);
tr[u].sum = tr[u << 1].sum + tr[u << 1 | 1].sum;
} void pushdown(int u)
{
Node &root = tr[u], &left = tr[u << 1], &right = tr[u << 1 | 1];
if(root.lazy)
{
left.maxv = right.maxv = root.lazy;
left.minv = right.minv = root.lazy;
left.sum = (left.r - left.l + 1) * root.lazy;
right.sum = (right.r - right.l + 1) * root.lazy;
left.lazy = right.lazy = root.lazy;
root.lazy = 0;
}
} void build(int u, int l, int r)
{
if(l == r) tr[u] = {l, r, w[r], w[r], w[r], 0};
else
{
tr[u] = {l, r, 0, 0, 0, 0};
int mid = l + r >> 1;
build(u << 1, l, mid);
build(u << 1 | 1, mid + 1, r);
pushup(u);
}
} void modify(int u, int l, int r, int v)
{
if(tr[u].minv >= v) return;
if(tr[u].l >= l && tr[u].r <= r && tr[u].maxv < v)
{
tr[u].lazy = v;
tr[u].minv = tr[u].maxv = v;
tr[u].sum = (LL)(tr[u].r - tr[u].l + 1) * v;
}
else
{
pushdown(u);
int mid = tr[u].l + tr[u].r >> 1;
if(l <= mid) modify(u << 1, l, r, v);
if(r > mid) modify(u << 1 | 1, l, r, v);
pushup(u);
}
} int query(int u, int l, int r, int &v)
{
if(tr[u].minv > v) return 0;
if(tr[u].l >= l && tr[u].r <= r && tr[u].sum <= v)
{
v -= tr[u].sum;
return tr[u].r - tr[u].l + 1;
}
else
{
pushdown(u);
int mid = tr[u].l + tr[u].r >> 1;
int res = 0;
if(l <= mid) res = query(u << 1, l, r, v);
if(r > mid) res += query(u << 1 | 1, l, r, v);
return res;
}
} int main()
{
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++ i) scanf("%d", &w[i]);
build(1, 1, n);
while(m -- )
{
int op, x, y;
scanf("%d%d%d", &op, &x, &y);
if(op == 1) modify(1, 1, x, y);
else printf("%d\n", query(1, x, n, y));
}
return 0;
}

2020.11.19

Codeforces Round #684 (Div. 2)的更多相关文章

  1. Codeforces Round #684 (Div. 2)【ABC1C2】

    比赛链接:https://codeforces.com/contest/1440 A. Buy the String 题解 枚举字符串中 \(0\) 或 \(1\) 的个数即可. 代码 #includ ...

  2. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  3. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  4. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  5. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  6. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  7. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  8. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  9. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

随机推荐

  1. CentOS 6 修改/etc/security/limits.conf不生效办法

    我们使用CentOS系统,在部署新的服务经常会遇到 打开最大文件数限制 too many open files的警告,通常我们只需要修改/etc/security/limits.conf该文件,增加两 ...

  2. POJ 1742 Coins 【可行性背包】【非原创】

    People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony ...

  3. codeforces 8C(非原创)

    C. Looking for Order time limit per test 4 seconds memory limit per test 512 megabytes input standar ...

  4. 计算机网络 part1 TCP

    一.TCP协议 references:newcoder TCP/IP协议,TCP和UDP的区别及特点 1.四层模型 应用层:载有应用程序,将数据发送给传输层.主要协议有HTTP.SMTP.FTP.DN ...

  5. mybatis(十一)mybatis常见问题

    用注解还是用 xml 配置? 常用注解:@Insert.@Select.@Update.@Delete.@Param.@Results. @Result 在 MyBatis 的工程中,我们有两种配置 ...

  6. 前端水印方案 All In One

    前端水印方案 All In One base64 用户名 图片水印 <div id="wm" style="pointer-events: none; width: ...

  7. pagehide event & sendBeacon

    pagehide event & sendBeacon 通过 API 测试 pagehide 是否触发了 pagehide 不支持正常的 fetch 请求发送 pagehide 仅支持 sen ...

  8. Arctic Code Vault Contributor

    Arctic Code Vault Contributor GitHub Archive Program https://archiveprogram.github.com/ Preserving o ...

  9. Visual Studio Online & Web 版 VS Code

    Visual Studio Online & Web 版 VS Code https://online.visualstudio.com https://devblogs.microsoft. ...

  10. flex & flex-wrap

    flex & flex-wrap https://css-tricks.com/almanac/properties/f/flex-wrap/ https://developer.mozill ...