CF1659 Codeforces Round #782 (Div. 2) 题解
之前说过的题解,E应该不会补了(大概)
A Red Versus Blue
题意非常简单,构造题。给定\(r\)个红色气球和\(b\)个蓝色气球,将它们排成一排,要求使得连续出现的最多的同色气球最少,题目保证\(b\)严格小于\(r\)。然而这道题我却做的令人感叹。
数据范围:\(1\leq t\leq 1000;3\leq n\leq 100;1\leq b<r\leq n;\)
首先,可以看出这个构造出的最大的最小数量是\(\lceil \frac{r}{b+1} \rceil\)。因为这个\(r\)可以被分成\(b+1\)份。
然后我的大脑就此停止工作了,开始进行了丑陋的模拟。主要思路是,求出来\(mx=\lfloor \frac n {b+1} \rfloor\),直接先按照\([mx*r+1*b]\)来分配,等到不满足\(r>b~and~r\geq mx\)时,再按照\([mx*r+1*b]\)分配,最后输出剩下的\(b\)。属实是三次\(wa3\)之后的无奈之举。
void solve(){
scanf("%d%d%d", &n, &r, &b);
int mx = n / (b + 1);
while (r > b && r >= mx && b > 0){
for (int i=0;i<mx;++i) printf("R");
printf("B");
r -= mx, b--;
}
while (b > 0 && r > 0){
printf("RB");
r--, b--;
}
for (int i=0;i<b;++i){
printf("B");
}
for (int i=0;i<r;++i){
printf("R");
}
puts("");
// printf("!! %d %d\n", r, b);
}
题解是这么解决的:令\(p=\lfloor \frac r {b+1} \rfloor\),\(q=r \bmod (b+1)\)。然后自然构造两类字符串:\([(p+1)*r+1*b]\);\([p*r+1*b]\)。代码也非常的简洁漂亮,不禁让我想起了之前一个A题的扫地机器人dalao的绝妙模拟。
这样,红色气球的数量即为\((p+1)q+p(b-q)+p=p(b+1)+q\)。
int n, r, b;
void solve(){
scanf("%d%d%d", &n, &r, &b);
int p = r / (b + 1), q = r % (b + 1);
for (int i=0;i<q;++i){
cout << string(p + 1, 'R') << "B";
}
for (int i=q;i<b;++i){
cout << string(p, 'R') << "B";
}
cout << string(p, 'R') << endl;
}
B Bit Flipping
有一个长度为\(n\)的01字符串\(s\),必须进行确切的\(k\)次操作。对于每次操作,我们都要选择一个位置\(i\),使得\(s[i]\)的值不变,字符串中其他位置的值反转。需要输出在\(k\)次操作后,字典序最大的字符串,并输出会在每个位置执行操作多少次。
数据范围:\(1\leq t \leq 1000;1\leq n \leq 2\times 10^5;0\leq k\leq 10^9\)
我们可以推知一些对解题必要的结论。首先,对于一个给定的bit,当他不被选择的时候,就会反转。并且,如果它被选择2次,那么就相当于没有被选择。这样的话,\(f_i\)只可能有1,或者偶数两种取值。
而且,第\(i\)个bit将会被反转\(k-f_i\)次。
将集合划分为如下情况:
- \(k\)是偶数,\(s[i]=0\),则\(f_i=0\)
- \(k\)是偶数,\(s[i]=1\),则\(f_i=1\)
- \(k\)是奇数,\(s[i]=0\),则\(f_i=1\)
- \(k\)是奇数,\(s[i]=1\),则\(f_i=0\)
这样从左向右执行,直到用光\(k\)步操作,就可以将\(s\)变为\(1111xxx\)形式的字符串,字典序最大。
若执行完毕\(k\)还有剩余,显然将步数都加到最后的\(s[n]\)时,字典序最大。
void solve(){
cin >> n >> m;
cin >> s;
init();
int tmp = m;
for (int i=0;i<n;++i){
if (i == n - 1) r[i] = tmp;
else if (tmp){
if ((s[i] - '0') ^ (m & 1) == 0)
r[i] = 1, --tmp;
}
if ((s[i] - '0') ^ ((m - r[i]) & 1)){
ans += "1";
}
else ans += "0";
}
cout << ans << endl;
for (int i=0;i<n;++i){
cout << r[i] << " \n"[i==n-1];
}
}
C Line Empire
大水题,自己动手做一下就会发现,求出以第\(i\)个地方为都城,比较最小值,就是答案。
ll n, a, b;
const int N = 2e5 + 5;
int x[N];
ll p[N];
void solve(){
scanf("%lld%lld%lld", &n, &a, &b);
for (int i=1;i<=n;++i){
scanf("%d", &x[i]);
}
for (int i=1;i<=n;++i){
p[i] = p[i - 1] + x[i];
}
ll mn = 3e18, cur;
for (int i=0;i<=n;++i){
cur = (a + b) * x[i] + b * ((p[n] - p[i]) - (n - i) * x[i]);
mn = min(mn, cur);
}
printf("%lld\n", mn);
}
D Reverse Sort Sum
对于01数组\(A[n]\),设函数\(f(k,A)\)返回结果为对\(A[n]\)的前\(k\)个元素排序后的结果\(B_k\)。定义数组\(C[n]=\sum\limits _{k=1}^n B_k\)。
现给定数组\(C[n]\),确定满足条件的\(A[n]\)。
数据范围:\(1\leq t \leq1000;1\leq n \leq 2\times 10^5;0\leq C_i \leq n\)
通过观察,我们可以发现,\(A[n]\)中1的数量\(k=\frac 1 n \sum\limits _{i=1}^n C_i\)。因为每个1都会在\(B_i\)中起作用1次。
再看,如果我们从后往前处理,那么可以发现\(A[n]\)的值是可以方便求出来的。
- \(C[n]=n\),则\(A[n]=1\)
- \(C[n]=1\),则\(A[n]=0\)
现在来看例1:
4
2 4 2 4
我们可以得到:
A=[1,1,0,1];
B1=[1,1,0,1];
B2=[1,1,0,1];
B3=[0,1,1,1];
B4=[0,1,1,1];
由于\(k=3\),我们可以清楚地得到\(B[n]=[0,1,1,1]\),那么删除\(B[n]\)的影响,就可以得到新的\(C[n-1]=[2,3,1]\)。相同的,我们可以判断出\(C[n-1]=1,A[n-1]=0,C[n-2]=[2,2]......\)
通过这样处理即可得到答案。区间减1,用树状数组就可以轻松实现,复杂度为\(O(N\log N)\),但这不是必要的。我们可以通过一个类似滑动窗口的东西去确定影响何时消失。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n;
const int N = 2e5 + 5;
int c[N], a[N], t[N];
void solve(){
scanf("%d", &n);
ll k = 0, L, suf = 0;
for (int i=1;i<=n;++i){
scanf("%d", &c[i]);
a[i] = 0, t[i] = n;
k += c[i];
}
k /= n, L = n - k + 1;
for (int i=n;i>=1&&L<=i;--i){
int cur = c[i] - (t[i] - i);
if (cur == i) a[i] = 1;
else if (cur == 1){
L--;
t[L] = i - 1;
}
}
for (int i=1;i<=n;++i){
printf(i==n?"%d\n":"%d ", a[i]);
}
}
int main(void){
int T;
scanf("%d", &T);
while (T--){
solve();
}
return 0;
}
CF1659 Codeforces Round #782 (Div. 2) 题解的更多相关文章
- Codeforces Round #182 (Div. 1)题解【ABCD】
Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...
- Codeforces Round #608 (Div. 2) 题解
目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...
- Codeforces Round #525 (Div. 2)题解
Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...
- Codeforces Round #528 (Div. 2)题解
Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...
- Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...
- Codeforces Round #677 (Div. 3) 题解
Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...
- Codeforces Round #665 (Div. 2) 题解
Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...
- Codeforces Round #160 (Div. 1) 题解【ABCD】
Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...
- Codeforces Round #383 (Div. 2) 题解【ABCDE】
Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...
- Codeforces Round #271 (Div. 2)题解【ABCDEF】
Codeforces Round #271 (Div. 2) A - Keyboard 题意 给你一个字符串,问你这个字符串在键盘的位置往左边挪一位,或者往右边挪一位字符,这个字符串是什么样子 题解 ...
随机推荐
- web3 产品介绍 MyEtherWallet 方便和智能合约交互的钱包
MyEtherWallet(简称MEW)是一款流行的去中心化以太坊钱包,它允许用户在安全且简单的界面中管理自己的以太坊资产.在本文中,我们将介绍MyEtherWallet的主要特点.功能以及如何使用它 ...
- 【微信小程序】 列表查询功能
对应本地生活案例: https://www.bilibili.com/video/BV1834y1676P?p=52 HTML代码部分: 就是普通的wx-for指令遍历 <!--pages/cl ...
- 【Mybatis】09 日志工厂配置 & Log4J
什么是日志 Log? 系统日志是记录系统中硬件.软件和系统问题的信息,同时还可以监视系统中发生的事件. 用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹. 系统日志包括系统日志. ...
- P6764 [APIO2020] 粉刷墙壁
思路: 本质上能进行的操作就是我们算出从第 \(i\) 块砖开始,连续刷 \(M\) 块砖,是否有承包商可以刷出期望颜色. 那么设 \(f_i\) 表示 \([i,i+m-1]\) 是否合法,那么就变 ...
- 【转载】 Ring Allreduce (深度神经网络的分布式计算范式 -------------- 环形全局规约)
作者:初七123链接:https://www.jianshu.com/p/8c0e7edbefb9来源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. ----------- ...
- Jax框架的性能分析——性能分析可视化
官方文档: https://jax.readthedocs.io/en/latest/profiling.html 将jax代码的性能文件写入到文件夹中,并给出上传第三方网站的链接生成(https:/ ...
- 在docker 容器开启ssh , 并映射22端口到物理载体机上以使外网访问
1. 运行某镜像以启动容器 docker run -it -p 127.0.0.1:5000:22 c7fe6d9267f8 /bin/bash -p 为指定端口, 127.0.0.1 为映射到的物 ...
- B站基于Apache DolphinScheduler的一站式大数据集群管理平台(BMR)初窥
一.背景 大数据服务是数据平台建设的基座,随着B站业务的快速发展,其大数据的规模和复杂度也突飞猛进,技术的追求也同样不会有止境. B站一站式大数据集群管理平台(BMR),在千呼万唤中孕育而生.本文简单 ...
- AtCoder Beginner Contest 327 D
AtCoder Beginner Contest 327D D - Good Tuple Problem (atcoder.jp)(种类并查集,二分图染色) 算法学习笔记(7):种类并查集 附上典题: ...
- 微服务全链路跟踪:jaeger集成hystrix
微服务全链路跟踪:grpc集成zipkin 微服务全链路跟踪:grpc集成jaeger 微服务全链路跟踪:springcloud集成jaeger 微服务全链路跟踪:jaeger集成istio,并兼容u ...