Codeforces Round #791 (Div. 2)(A-D)

A. AvtoBus

题意:

给你 n, 问满足 4x+6y=n4x+6y=n4x+6y=n 的 x+yx+yx+y的最小值和最大值是多少?x,yx,yx,y 都是非负整数。

题解:

n如果是奇数,无解。如果是偶数,等式除以2,考虑 2x+3y=n2x+3y=n2x+3y=n 。

要想使得x+yx+yx+y尽可能大,那么x要尽量多,就需要找最小的y满足n−3yn-3yn−3y是偶数,分别讨论摸3的各种情况。反之同理。

#include <bits/stdc++.h>using namespace std;typedef long long ll;
typedef pair<int, int> pii;const int MAXN = 1e5 + 10;
const int MOD = 1e9 + 7;int main() {#ifdef LOCALfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifios::sync_with_stdio(false), cin.tie(0);int t;ll n;cin >> t;while (t--) {cin >> n;if (n & 1 || n == 2) {cout << -1 << endl;continue;}n /= 2;ll mi = 1e9, mx = 0;if (n < 4) {cout << "1 1" << endl;continue;}switch (n % 3) {case 0:mi = n / 3;break;case 1:mi = (n - 4) / 3 + 2;break;case 2:mi = (n - 2) / 3 + 1;break;default:break;}if (n & 1) {mx = max(mi, 1 + (n - 3) / 2);}else {mx = max(mi, n / 2);}cout << mi << ' ' << mx << endl;}return 0;
}

B. Stone Age Problem

题意:

给你 长度为nnn的数组aaa, 有两种操作:

  1. 把aia_iai​改成xxx
  2. 把所有数改成xxx

输出每次操作后

题解:

单点更新,区间更新,维护区间和,这不就是线段树吗,练板子了。。。。当然,这里是区间赋值

#include <bits/stdc++.h>using namespace std;typedef long long ll;
typedef pair<int, int> pii;const int MAXN = 2e5 + 10;
const int MOD = 1e9 + 7;int n, q, a[MAXN];struct node {int l, r;ll lazy;ll sum;
} tr[MAXN << 2];inline int lson(int x) {return x << 1;
}
inline int rson(int x) {return x << 1 | 1;
}void pushup(int x) {tr[x].sum = tr[lson(x)].sum + tr[rson(x)].sum;
}void pushdown(int x) {if (tr[x].lazy) {tr[lson(x)].lazy = tr[x].lazy;tr[rson(x)].lazy = tr[x].lazy;tr[lson(x)].sum = (tr[lson(x)].r - tr[lson(x)].l + 1) * tr[x].lazy;tr[rson(x)].sum = (tr[rson(x)].r - tr[rson(x)].l + 1) * tr[x].lazy;tr[x].lazy = 0;}
}void build(int x, int l, int r) {tr[x].l = l, tr[x].r = r, tr[x].lazy = 0;if (l == r) {return;}int mid = l + r >> 1;build(lson(x), l, mid);build(rson(x), mid + 1, r);pushup(x);
}ll query(int x, int l, int r) {if (tr[x].l >= l && tr[x].r <= r)return tr[x].sum;if (tr[x].l > r || tr[x].r < l)return 0;pushdown(x);return query(lson(x), l, r) + query(rson(x), l, r);
}void update(int x, int l, int r, ll k) {if (tr[x].l >= l && tr[x].r <= r) {tr[x].lazy = k;tr[x].sum = (tr[x].r - tr[x].l + 1) * k;return;}if (tr[x].l > r || tr[x].r < l)return;pushdown(x);update(lson(x), l, r, k);update(rson(x), l, r, k);pushup(x);
}int main() {
#ifdef LOCALfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifios::sync_with_stdio(false), cin.tie(0);cin >> n >> q;build(1, 1, n);for (int i = 1; i <= n; i++) {int a;cin >> a;update(1, i, i, a);}while (q--) {int t, x, i;cin >> t;if (t == 1) {cin >> i >> x;update(1, i, i, x);}else {cin >> x;update(1, 1, n, x);}cout << query(1, 1, n) << endl;}return 0;
}

C. Rooks Defenders

题意:

给你 n*n的国际象棋棋盘,有3种操作:

  1. 在(i,j)(i,j)(i,j)处放一个车
  2. 移除(i,j)(i,j)(i,j)处的车
  3. 查询矩形(x1,y1),(x2,y2)(x_1,y_1), (x_2,y_2)(x1​,y1​),(x2​,y2​)的所有点是不是都被车攻击到

题解:

用两个树状数组维护行和列能不能被车吃到,放子的时候,注意幂等,也就是说,这一行/列如果已经被车吃到了,就不用放了。

也可以用线段树做,维护区间最小值。

#include <bits/stdc++.h>using namespace std;#define int long longtypedef pair<int, int> pii;const int MAXN = 2e5 + 10;
const int MOD = 1e9 + 7;int n, q;int tr1[MAXN], tr2[MAXN];
int r[MAXN], c[MAXN];
inline int lowbit(int x) {return x & (-x);
}void add(int* tr, int i, int d) {while (i <= n) {tr[i] += d;i += lowbit(i);}
}int sum(int* tr, int i) {int res = 0;while (i > 0) {res += tr[i];i -= lowbit(i);}return res;
}signed main() {#ifdef LOCALfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifios::sync_with_stdio(false), cin.tie(0);int t;int x, y, x1, x2, y1, y2;cin >> n >> q;while (q--) {cin >> t;if (t == 1) {cin >> x >> y;r[x]++, c[y]++;if (r[x] == 1) add(tr1, x, 1);if (c[y] == 1) add(tr2, y, 1);}else if (t == 2) {cin >> x >> y;r[x]--, c[y]--;if (r[x] == 0) add(tr1, x, -1);if (c[y] == 0) add(tr2, y, -1);}else {cin >> x1 >> y1 >> x2 >> y2;bool row = sum(tr1, x2) - sum(tr1, x1 - 1) >= x2 - x1 + 1;bool col = sum(tr2, y2) - sum(tr2, y1 - 1) >= y2 - y1 + 1;puts((row || col) ? "Yes" : "No");}}return 0;
}

D.Toss a Coin to Your Graph…

题意:

给你一个图,选择一条长度为k−1k-1k−1的路径,使得沿路k个点的点权的最大值最小

题解:

看到最X值最X,刻在DNA里就是“二分答案“,那么我们可以看出答案最大值为点权最大值1e9,最小值为0,二分答案记为mid,则问题转化为:

是否存在一条长度为k−1k-1k−1 的路径,使得沿路k个点的点权不超过midmidmid ?

可以想到,如果存在,那么这条路径经过的点的点权都不超过mid,那就一定在原图里面点权小于mid的子图里面,则问题可以进一步转化为:

给你一个图,是否存在长度为k−1k-1k−1的路径?

这样问题就变得容易解决了,首先如果有环,一定存在任意长度的路径。

否则是个dag图,拓扑排序的时候记录dp[i]表示从入度为0的点走到i点的最长路径,如果走到了k,则直接返回true,否则拓扑排序出来之后判断是否仍有入度不为0的点,如果有,说明一定存在环,若存在环,就说明任意长度的路径都存在,返回true,否则为false。

#include <bits/stdc++.h>using namespace std;typedef long long ll;
typedef pair<int, int> pii;const int MAXN = 2e5 + 10;
const int MOD = 1e9 + 7;int n, m;
ll k;
ll a[MAXN];vector<int> g[MAXN];int in[MAXN];
bool vis[MAXN];
int dp[MAXN];
// 建一个新图
vector<int> g2[MAXN];
unordered_set<int> s;// if exists path which max number of it <= x
bool check(int x) {s.clear();for (int i = 1; i <= n; i++) {in[i] = vis[i] = dp[i] = 0;g2[i].clear();if (a[i] <= x) s.insert(i), dp[i] = 1;}for (int i = 1; i <= n; i++) {for (auto j : g[i]) {if (s.find(i) != s.end() && s.find(j) != s.end()) {g2[i].push_back(j);in[j]++;}}}queue<int> q;for (int i = 1; i <= n; i++) {if (s.find(i) != s.end() && !in[i]) q.push(i);}while (!q.empty()) {int j = q.front();q.pop();vis[j] = true;if (dp[j] >= k) return true;for (auto u : g2[j]) {if (!vis[u]) {dp[u] = max(dp[u], dp[j] + 1);if (dp[u] >= k) return true;in[u]--;if (!in[u]) q.push(u);}}}for (int i = 1; i <= n; i++) {if (s.find(i) != s.end() && in[i]) return true;}return false;
}int main() {#ifdef LOCALfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifios::sync_with_stdio(false), cin.tie(0);cin >> n >> m >> k;for (int i = 1; i <= n; i++) {cin >> a[i];}for (int i = 1; i <= m; i++) {int u, v;cin >> u >> v;g[u].push_back(v);}ll l = 0, r = 1e9;while (l < r) {ll mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}// cout << l << endl;if (check(l))cout << l << endl;else cout << -1 << endl;return 0;
}

Codeforces Round #791 (Div. 2)(A-D)相关推荐

  1. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  2. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  3. Codeforces Round #698 (Div. 2)(A ~ F)6题全,超高质量题解)【每日亿题】2021/2/4

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #698 (Div. 2)(A ~ F)6题全,超 ...

  4. Codeforces Round #808 (Div. 1)(A~C)

    Codeforces Round #808 (Div. 1)(A~C) A:Doremy's IQ 题目大意 给你一个序列,然后你从左到右可以选择弄或者不弄. 然后你有一个智商值,如果你当前弄的数小于 ...

  5. Codeforces Round #699 (Div. 2) (A ~ F)6题全,超高质量良心题解【每日亿题】2021/2/6

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) (A.B.C)[每日亿题]2021/2/ ...

  6. Codeforces Round #739 (Div. 3)(AK实况)

    Codeforces Round #739 (Div. 3) A. Dislike of Threes 找到第kkk个既不是333的倍数,个位数上也不是333的数,也已预处理然后O(1)O(1)O(1 ...

  7. Codeforces Round #703 (Div. 2)(A ~ F)超高质量题解【每日亿题2 / 19】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A. Shifting Stacks B - Eastern Exhibition C1 - G ...

  8. Codeforces Round #764 (Div. 3)(A~G)

    考试结束rua!开始写题解. 这场打完后明显感觉到自己水平下降了很多,考试结束后该回回手了. 赛中过了A~D,F,E题题目读错了干想了一个多小时.....给整麻了 A. Plus One on the ...

  9. Codeforces Round #827 (Div. 4)(A~G)(F已更新)

    "爷爷,你关注的up主要更新拉!" 今天起开始CF/At不定期更新 A. Sum(暴力) 只需判断a,b,c是否为和关系即可 #include <bits/stdc++.h& ...

最新文章

  1. 面试题----中断的一些知识
  2. hyper-v NAT网络
  3. 在Ubuntu下增加root用户
  4. oracle 找不到程序单元,Oracle Web ADI 加载时错误:ORA-06508: PL/SQL: 无法在调用之前找到程序单元...
  5. 月薪40K的推荐算法工程师,需要具备怎样的技能?
  6. 没有眼睛的街头卖艺人
  7. java 中怎么加汉字,jquery怎么向body里面增加文字
  8. 自定义字体 (暂不支持中文)
  9. 疫情之下,精准测试的智能可信模式正在成为中流砥柱
  10. 手rm-linux联网后自动dhcp,Linux操作系统下DHCP简单设置
  11. SqlServer2008卸载掉
  12. mysql2008安装失败_sql server 2008为什么会安装失败 sql2008安装失败解决办法
  13. python对txt文件进行处理实战_python数据处理实战
  14. 邢帅——一个逆袭的草根
  15. CodeForces 1305C-Kuroni and Impossible Calculation(抽屉原理)
  16. C#获取汉字首字母,多音拼音
  17. Office 365 小技巧 :Microsoft Teams_ 就地编辑文档
  18. 友价实现一键Nofollow(数据库替换)
  19. HP收购3Com在2009年全球最佳品牌100强中,惠普排名11位,思科14位
  20. 在WPS中提取出的照片在哪找_WPS会员签到领,不香吗?

热门文章

  1. 下列不属于python保留字的是-以下哪个选项不是Python语言的保留字?
  2. java小组坦克大战游戏开发文档开发日志_java实现坦克大战游戏
  3. 洛谷P2486 lct做法
  4. matlab电子原件不能相连,Matlab电力电子仿真教程..ppt
  5. 2021年安装deepin20.3和windows双系统
  6. LNMP架构搭建(源码编译)
  7. 苹果高通 5G 开战!
  8. js 将字符串转化为number的简单方式
  9. DataGuard - 利用Cascaded Redo Log Destinations避免WAN稳定性问题
  10. RxJava简单使用