首页 > 其他分享 >CF1873(Div. 4) 题解 (A to E)

CF1873(Div. 4) 题解 (A to E)

时间:2023-10-04 14:55:05浏览次数:51  
标签:11 int 题解 texttt CF1873 cin tie Div

A Short Sort 题解

题目大意

给定一个长度为 \(3\) 、由 \(a,b,c\) 组成的字符串,问可以不变或交换两个字符是的变为 \(\texttt{abc}\)。

解题思路

由于大小固定,所以预处理可行的字符串(仅包含 \(\texttt{abc acb bac cba}\))即可。

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  int t;
  cin >> t;
  while(t--) {
    string s;
    cin >> s;
    if(s == "abc" || s == "acb" || s == "bac" || s == "cba") {
      cout << "YES\n";
    } else {
      cout << "NO\n";
    }
  }
  return 0;
}

B Good Kid 题解

题目大意

给定长度为 \(n\) 的数列 \({a_i}\),求 \(\max\limits_{i\in[1,n]}\left\{\left(i+1\right)\times\left(\prod\limits_{j\in[1,n],j\neq i}{j}\right)\right\}\)。

解题思路

直接模拟即可。

代码

#include<bits/stdc++.h>
using namespace std;
int a[10];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  int t;
  cin >> t;
  while(t--) {
    int n, sum = 1, ans = 0;
    cin >> n;
    for(int i = 1; i <= n; i++) {
      cin >> a[i];
    }
    for(int i = 1; i <= n; i++) {
      sum = 1;
      for(int j = 1; j <= n; j++) {
        sum *= (j == i ? a[j] + 1 : a[j]);
      }
      ans = max(ans, sum);
    }
    cout << ans << '\n';
  }
  return 0;
}

C Target Practice 题解

题目大意

有一个正方形且边长为 \(10\) 的靶子,从外到内点数分别是 \(1\) 至 \(5\)。如图所示:

给定 Vlad 的射靶情况,例如:

X.........
..........
.......X..
.....X....
......X...
..........
.........X
..X.......
..........
.........X

X 表示 Vlad 射中的地方,求他的点数和。

解题思路

很水的一道模拟题。
我们找一下规律,对于一个坐标为 \(\left(i,j\right)\) 的点,则他的点数 \(f(i,j) = \begin{cases} \min\{i,j\} & i\le5,j\le5 \\ \min\{i,11-j\} & i\le5,j>5 \\ \min\{11-i,j\} & i>5,j\le5 \\ \min\{11-i,11-j\} & i>5,j>5 \\ \end{cases}\),整合一下便是 \(f(i,j)=\min\{i,j,11-i,11-j\}\)。

代码

#include<bits/stdc++.h>
using namespace std;
char c[15][15];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  int t;
  cin >> t;
  while(t--) {
    int cnt = 0;
    for(int i = 1; i <= 10; i++) {
      for(int j = 1; j <= 10; j++) {
        cin >> c[i][j];
        if(c[i][j] == 'X') {
          cnt += min({i, j, 11 - i, 11 - j});
        }
      }
    }
    cout << cnt << '\n';
  }
  return 0;
}

D 1D Eraser 题解

题目大意

给定一个由 \(\texttt{W}\) 和 \(\texttt{B}\) 字符串 \(s\),每一次操作可以选任意一段长度为 \(k\) 的连续区间 \([l,r]\) 里所有元素都变为 \(\texttt{W}\)。
问至少需要几次操作才能使所有元素均为 \(\texttt{W}\)。

解题思路

枚举左端点 \(l\),如果 \(s_l\) 为 \(\texttt{B}\),则需要一次操作使得 \(s_l,s_{l+1},\cdots,s_{l+k-1}\) 均变为 \(\texttt{W}\)。

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n, k;
char a[N];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  int t;
  cin >> t;
  while(t--) {
    int cnt = 0;
    cin >> n >> k >> a;
    int i;
    for(i = 0; i < n - k + 1; ) {
      if(a[i] == 'B') {
        ++cnt;
        for(int t = 1; t <= k; t++) {
          a[i] = 'W';
          ++i;
        }
      } else {
        ++i;
      }
    }
    for(; i < n; i++) {
      if(a[i] == 'B') {
        ++cnt;
        break;
      }
    }
    cout << cnt << '\n';
  }
  return 0;
}

E Building an Aquarium 题解

题目大意

给定 \(n\) 个柱子,每个柱子的高度为 \(a_1,a_2,\cdots,a_n\)。现往里头注入不大于 \(x\) 的水,对于每个单位的水,如果它两边的柱子高度比它矮,它将会流下去。
问水的最低深度的最大值 \(h\)。

解题思路

经典的二分。
由于水量不超过 \(x\),所以 \(h\) 一定小于 \(\max\limits_{i\in [1,n]}\{a_i\}+x\)。从而把 \(h\) 在 \([1,\max\limits_{i\in [1,n]}\{a_i\}+x]\) 中二分即可。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 5;
int n, x, a[N];
inline bool check(int xx) {
  int cnt = 0;
  for(int i = 1; i <= n; i++) {
    cnt += (a[i] < xx ? xx - a[i] : 0);
  }
  return cnt <= x;
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  int t;
  cin >> t;
  while(t--) {
    int maxi = -1, ans = 0;
    cin >> n >> x;
    for(int i = 1; i <= n; i++) {
      cin >> a[i];
      maxi = max(maxi, a[i]);
    }
    int l = 1, r = maxi + x;
    while(l <= r) {
      int mid = (l + r) >> 1;
      if(check(mid)) {
        ans = mid;
        l = mid + 1;
      } else {
        r = mid - 1;
      }
    }
    cout << ans << '\n';
  }
  return 0;
}

标签:11,int,题解,texttt,CF1873,cin,tie,Div
From: https://www.cnblogs.com/cyf1208/p/17742268.html

相关文章

  • 题解 CF1034C【Region Separation】/ SS221116D【Xiong AK 10 IOI】
    很妙的性质题!全是意识流证明见过吗?problem每次选一个非空边集删掉,谓之曰砍树。砍树后需要满足每个连通块的点权和相同。在一个方案中可以砍很多次树,都要满足砍树后的要求。一共有多少种合法方案呢?\(n\leq10^6,1\leqa_i\leq10^9\)。solution假如我们将树砍成\(k\)个连通......
  • 传奇团子师傅题解
    传奇团子师傅题解(模拟退火)申明:本篇题解借鉴了:https://www.luogu.com.cn/blog/SDNetFriend/solution-p7218这篇博客(主要在bitset部分)。题意:给你个矩阵,包含三种颜色,一个美丽串要求你横着或者竖着或者斜着串成一串的三个颜色有特定的顺序,求拿取最多美丽串的方案是什么。题目分......
  • 【UVA 442】Matrix Chain Multiplication 题解(栈)
    假设您必须计算一个表达式,如ABCDE,其中A、B、C、D和E是矩阵。由于矩阵乘法是关联的,所以执行乘法的顺序是任意的。然而,所需的初等乘法的数量很大程度上取决于求值顺序您可以选择。例如,设A为5010矩阵,B为1020矩阵,C为205矩阵。有两个计算ABC的不同策略,即(AB)C和A(B*C)。第一个需要1500......
  • Hadoop问题解决记(2)
     1.发现问题在对HBase集群进行压力测试过程中发现,当实际写入HBase和从HBase查询的量是平时的若干倍时(集群规模10~20台,每秒读写数据量在几十万条记录的量级),导致集群的读写出现一定程度的波动。具体如下:1)写端抛出以下异常信息:org.apache.hadoop.hbase.client.RetriesExha......
  • Codeforces Round 888 (Div. 3)DEF
    CodeforcesRound888(Div.3)DEFD.PrefixPermutationSums题意:给你一个长度为\(n-1\)的数组,是否能找出一个长度为\(n\)的排列,求出这个排列的前缀和,去掉前缀和数组的任意一个元素之后和原来的数组相等。例如\([6,8,12,15]\),可以是排列\([1,5,2,4,3]\)的前缀......
  • Hadoop问题解决记(1)
    最近在测试HBase时遇到一个非常奇怪的问题:集群有7台机器,其中1台Master,6台RegionServer。但是Master只能控制其中1台RegionServer,而无法控制其他5台RegionServer。打开master的日志文件,发现以下错误信息:2011-04-2216:37:21,242WARNorg.apache.hadoop.hbase.master.Assignment......
  • Educational Codeforces Round 155 (Rated for Div. 2)
    \(A.Rigged!\)直接取第一个人能举起的最大重量看他是否是冠军即可。voidsolve(){intn=read();intfx=read(),ft=read();intans=fx;for(inti=1;i<n;i++){intx=read(),t=read();if(x>=fx&&t>=ft)ans=-1;}cout<<ans<......
  • 『题解』P9688
    题目传送门思路:设有两个颜色\(x_1x_2\),两端分别为\(l_1\)\(r_1\),\(l_2\)\(r_2\)。通过观察可以发现,若满足\(x_1<x_2\)且\(r_1>l_2\)则\(x_1x_2\)一定是单调不下降的。那么我们可以先预处理出一个颜色可以与前面的哪些颜色构成单调不下降,然后用dp求出最终答案......
  • Codeforces Round 898 (Div. 4) A~H
    CodeforcesRound898(Div.4)A~HA.ShortSort题意:输出不一样的字符的个数思路:模拟即可//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmod=1e9+7;constintN=2e5+10;intmain(){ios::s......
  • 题解 Coloring Brackets
    题目链接对于括号问题,考虑区间\(dp\)。这道题的括号序列是固定的,所以直接找出每个括号对应的括号在进行转化即可。设\(f_{l,r,0/1/2,0/1/2}\)表示\(l\simr\),左括号不染色/染红色/染蓝色,右括号不染色/染红色/染蓝色的方案数。若\(l,r\)是一对匹配括号,那么f_{l,r}便可以......