A. Red Versus Blue

题目大意

红队和蓝队进行了 n n n次比赛。用一个长度为 n n n的字符串表示每场的胜负情况。
R代表红队获胜,B代表蓝队获胜,蓝队获胜的次数严格小于红队。
给你三个整数n, b, r请你构造一个长度为n的字符串,表示 n n n场比赛的胜负情况,满足R的个数为r,B的个数为b,
并且使得每个队伍连续获胜的最大次数尽可能小。

解题思路

如果要使连续字符数量最小,肯定是要进行平均分配。
对于字符串,rB可以把它分为b + 1段。
所以我们只需要对每段平均分配r / (b + 1)R
因为r / (b + 1)不一定是整数, 所以不一定能够每段都一样的数量。
还剩余 r % (b + 1)R要逐个分配1个到每段里直至剩余数量为0

Code

void solve()
{int n, r, b;   cin >> n >> r >> b;int avg = r / (b + 1), remain = r % (b + 1);for (int i = 1; i <= b + 1; i++)   a[i] = avg;  // 除数平均分配for (int i = 1; i <= remain; i++) a[i]++;  // 余数逐个分配for (int i = 1; i <= b + 1; i++){for (int j = 1; j <= a[i]; j++) cout << "R";if (i != b + 1)   cout << "B";}cout << '\n';
}

B. Bit Flipping

题目大意

给定一个长度为 n n n的二进制字符串和操作次数 k k k,你可以进行 k k k次这样的操作:选定字符串的任意一位,除了选定位置外,其他位置的状态都被翻转(0变1,1变0)。求进行 k k k次操作之后,能获得的字典序最大的字符串,以及每一位的反转次数。

解题思路

看了看官方题解,觉得思路更清晰些!

让我们看看给定的位会被翻转多少次。
显然,只要在操作中未选择某个位,它就会被翻转。因此,第 i i i位被翻转 k − f i k-f_i k−fi​次。 我们希望尽可能少地选择某一位。现在我们可以处理一些情况。
k k k是偶数,第 i i i位是1 ⇒ f i = 0 f_i = 0 fi​=0(偶数翻转不改变位)
k k k是偶数,第 i i i位是0 ⇒ f i = 1 f_i = 1 fi​=1(奇数次翻转将位从 0 切换到 1)
k k k是奇数,第 i i i位是1 ⇒ f i = 1 f_i= 1 fi​=1(偶数翻转不改变位)
k k k是奇数,第 i i i位是0 ⇒ f i = 0 f_i= 0 fi​=0(奇数翻转将位从 0 切换到 1)
从左到右处理字符串,直到不能再处理为止。 如果最后还有一些剩余的 k k k,可以把它们全部放在最后一位。
然后可以通过检查 k − f i k - f_i k−fi​的奇偶性来构造最终的字符串。

Code

void solve()
{cin >> n >> k >> s;vector<int> f(n, 0);int t = k;for (int i = 0; i < n && t > 0; i++)if (k % 2 == s[i] - '0')    f[i] = 1, t--;f[n - 1] += t;for (int i = 0; i < n; i++)if ((k - f[i]) % 2 == 1)    s[i] = '1' - (s[i] - '0'); // 翻转cout << s << endl;for (auto x : f) cout << x << ' ';cout << endl;
}

C. Line Empire

题目大意

假设你是一个国王,你的首都的初始位置是 0 0 0。
地图上有 n n n个未征服的国家位置分别为 0 < x 1 < x 2 < x 3 < . . . < x n 0 < x_1 < x_2 < x_3 < ... < x_n 0<x1​<x2​<x3​<...<xn​,你想征服所有国家。
你有两种操作:
1.更换首都:将当前的首都 c 1 c1 c1更换为其他任意被征服的国家(位置为 c 2 c2 c2)所需要花费的代价为 a ∗ ∣ c 1 − c 2 ∣ a * |c1 - c2| a∗∣c1−c2∣
2.征服国家:可以从当前的首都征服任意一个未征服的国家,所需要花费的代价为 b ∗ ∣ c 1 − c 2 ∣ b * |c1 - c2| b∗∣c1−c2∣
注意:如果在 c 1 c1 c1和 c 2 c2 c2之间存在未征服的国家,那么就不能执行这个征服操作 。给定 n n n, a a a和 b b b,以及未征服国家的位置,求征服所有国家的最小代价。

解题思路

先上图!

未迁都的情况下:前面部分 = b ∗ ( p o s 2 − p o s 1 ) ∗ ( n − i ) b * (pos2 - pos1) * (n - i) b∗(pos2−pos1)∗(n−i) => n-i表示剩余没有征服的领地数量
迁都的情况下:前面部分 = 迁都费用 = a ∗ ( p o s 2 − p o s 1 ) a * (pos2 - pos1) a∗(pos2−pos1)
化简式子,两式同除 ( p o s 2 − p o s 1 ) (pos2 - pos1) (pos2−pos1)
所以只需比较 b ∗ ( n − i ) b * (n - i) b∗(n−i)和 a a a的大小即可
如果后者小于前者就迁都, 这种情况下总是满足最优解

Code

void solve()
{int n, a, b;   cin >> n >> a >> b;for (int i = 1; i <= n; i++)    cin >> pos[i];pos[0] = 0;  // 初始为0int res = 0, now = pos[0];  for (int i = 1; i <= n; i++){res += b * (pos[i] - pos[now]);  // 加上征服的费用if (b * (n - i) >= a)   res += a * (pos[i] - pos[now]), now = i;  // 符合条件则迁都,满足最优}cout << res << endl;
}

D. Reverse Sort Sum

题目大意

定义数组 A A A是一个由 0 0 0和 1 1 1构成的数组,函数 $f(k, A) $ 表示对数组 A A A 的前 k k k个元素排序后得到的新数组 C C C。
如果给定 A A A有 n n n个元素,那么数组 C = f ( 1 , A ) + f ( 2 , A ) + . . . + f ( k , A ) C=f(1,A) + f(2,A) + ... + f(k,A) C=f(1,A)+f(2,A)+...+f(k,A)
现在给出数组 C C C,求数组 A A A。

解题思路

比赛时真的两点性质都想到了,原本想用线段树,但是没想到树状数组也可以做到
题解可以参考严格鸽

TIPS:树状数组区间修改,单点查询等操作可以看这里

Code

int n, a[N], tr[N], res[N];
int lowbit(int x){return x & -x;}
void add(int x, int v)
{for (int i = x; i <= n; i += lowbit(i)) tr[i] += v;
}int query(int x)  // 单点查询即差分求和
{int res = 0;for (int i = x; i > 0; i -= lowbit(i)) res += tr[i];return res;
}void solve()
{memset(res, 0, sizeof res);memset(tr, 0, sizeof tr);  // 每次都别忘记初始化int sum = 0;cin >> n;for (int i = 1; i <= n; i++)    cin >> a[i], sum += a[i];for (int i = 1; i <= n; i++)    add(i, a[i] - a[i - 1]);  int num1 = sum / n;for (int i = n; i >= 1; i--)if (query(i) >= i)    {res[i] = 1;add(i - num1 + 1, -1), add(i + 1, 1);  // 区间修改要通过差分补值num1--;}for (int i = 1; i <= n; i++)    cout << res[i] << " ";cout << '\n';
}

TIPS:如果WA了,那一定是精度问题,本人代码头文件不同

Codeforces」 Round #782 (Div. 2) A —D相关推荐

  1. Codeforces Round #782 (Div. 2) A~D

    Codeforces Round #782 (Div. 2) A. Red Versus Blue 题意:红队和蓝队进行了 n n n次比赛.用一个长度为 n n n的字符串表示每场的胜负情况.R代表 ...

  2. Codeforces Round #782 (Div. 2)

    咕咕咕咕咕 前段时间去打华为软挑了,所以停了一段时间的训练,嘤嘤嘤 这场本来要打,然后十分钟写A写bug了,于是玩游戏去了-- 早上vp了一下,下课了就溜回去睡觉了,下午把c做了,d还没看,回头看一下 ...

  3. 【Codeforces】Round #488 (Div. 2) 总结

    [Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...

  4. Codeforces Beta Round #75 (Div. 1 Only) B. Queue 线段树。单点更新

    http://codeforces.com/problemset/problem/91/B 题意: 给你n个数,求得i 到n中小于a[i]的最右边的a[j],然后求a[i]到a[j]之间包含了多少个数 ...

  5. Codeforces Beta Round #22 (Div. 2 Only) E. Scheme(DFS+强连通)

    题目大意 给了 n(2<=n<=105) 个点,从每个点 u 出发连向了一个点 v(共 n 条边) 现在要求添加最少的边使得整个图是一个强连通图 做法分析 这道题千万不要一般化:先求强连通 ...

  6. Codeforces Beta Round #4 (Div. 2 Only)

    Codeforces Beta Round #4 (Div. 2 Only) A 水题 1 #include<bits/stdc++.h> 2 using namespace std; 3 ...

  7. Codeforces Round #782 (Div. 2)-D. Reverse Sort Sum(树状数组)

    题目链接:Problem - D - Codeforces 题意:给定一个 01 序列 ,对  区间分别进行递增排序,得到  个序列,现给定  序列, ,即所有序列第  位的和.求给定 序列所对应的原 ...

  8. Codeforces Round #782 (Div. 2) ABCD

    打昆明打傻了,不会写题了QWQ A - Red Versus Blue 要求连续的 R R R的数量最少,也就是用 B B B尽可能的将 R R R隔开,显然 b b b个 B B B最多分成 b + ...

  9. [cf]Codeforces Round #782 (Div. 2)

    目录 前言 A.Red Versus Blue code B. Bit Flipping code C Line Empire code D.(完全不会,蹲大佬的题解) 前言 传送门 : (那天人们又 ...

最新文章

  1. SAP MM 外部采购退货的ARM功能实在是鸡肋?
  2. iOS使用shell脚本批量修改属性
  3. 腾讯云,搭建Docker环境
  4. aspose.word在某个字后面自动换行_在Arctime里制作字幕如何自动换行?如何添加注释、广告语?...
  5. Leaflet中使用leaflet-sidebar插件实现侧边栏效果
  6. Zuul:路由转发,排除和自定义
  7. Redis线上救命丸:01---误操作AOF、RDB恢复数据
  8. html设置div页面最底,使用css让大图片不超过网页宽度
  9. apache log4j入门
  10. linux c 获取网卡状态(UP or DOWN)
  11. 生活不可缺的46个搜索引擎
  12. 边缘计算崛起!施耐德联手华胜天成打造胶囊数据中心,真正端到端交付
  13. 编译原理 - SLR(1)
  14. 微软IE浏览器1月市场份额再创新低 跌至67.6%
  15. 数值计算详细笔记(一):基础数学知识回顾
  16. c语言中实型变量的三种类型,在C语言中的实型变量分为两种类型..doc
  17. mac忘记mysql初始密码怎么办_Mac下忘记Mysql密码重新设置密码的图文教程
  18. 打开计算机的方法有哪些,dmg文件怎么打开 常见打开方法有哪些
  19. 1.1你是谁?你从哪来?你到哪去? -交给学习来解答
  20. cmd命令行进行C++代码编译运行;实现进程调度和存储管理

热门文章

  1. java笔记 ActionListener
  2. 『每日AI』致敬宇宙大师丨霍金和他的预言
  3. 李志诉《明日之子》侵权案获赔20万
  4. .NET基础笔记(C#)
  5. 朋友圈很火的小电视网站源码
  6. 【接口技术】实验五:可编程并行接口8255
  7. URL中参数中的加号
  8. cvc-id.3: A field of identity constraint ‘web-app-filter-name-uniqueness‘ matched element ‘web-app‘
  9. Python分析三季度基金调仓
  10. xshell下载日志命令_Xshell日志的保存方法