首页 > 其他分享 >Educational Codeforces Round 166 (Rated for Div. 2)

Educational Codeforces Round 166 (Rated for Div. 2)

时间:2024-05-31 12:11:06浏览次数:16  
标签:std Educational Rated bb int sum Codeforces cin lst

目录

写在前面

比赛地址:https://codeforces.com/contest/1976

满课,并且 48 小时之内只睡了 8h。

本来不想打的,但是手痒就上小号打了,然而唐唐唐掉大分呃呃

A

签到。

感谢 isdigit 函数。

//
/*
By:Luckyblock
*/
#include <bits/stdc++.h>
#define LL long long
//=============================================================
//=============================================================
//=============================================================
int main() {
  //freopen("1.txt", "r", stdin);
  std::ios::sync_with_stdio(0), std::cin.tie(0);
  int T; std::cin >> T;
  while (T --) {
    int n; std::cin >> n;
    std::string s; std::cin >> s;
    int flag = 1;
    for (int i = 1; i < n; ++ i) {
      if (!isdigit(s[i - 1]) && isdigit(s[i])) flag = 0;
    }
    for (int i = 0, lst = -1; i < n; ++ i) {
      if (isdigit(s[i])) {
        if (lst == -1) lst = i;
        else if (s[lst] > s[i]) flag = 0;
        lst = i;
      }
    }
    for (int i = 0, lst = -1; i < n; ++ i) {
      if (!isdigit(s[i])) {
        if (lst == -1) lst = i;
        else if (s[lst] > s[i]) flag = 0;
        lst = i;
      }
    }
    std::cout << (flag ? "YES\n" : "NO\n");
  }
  return 0;
}

B

模拟。

对 \(a_1\sim a_n\) 的调整的代价是固定的,即为 \(\sum_{1\le i\le n} |a_i - b_i|\)。在对它们调整的过程中需要选择一个数复制一份变为 \(a_{n + 1}\),并最小化调整 \(a_{n + 1}\) 至 \(b_{n + 1}\) 的代价 \(|b_{n + 1} - a_{n + 1}|\)。

显然若存在 \(1\le i\le n\),使得 \(\min(a_i, b_i) \le b_{n + 1}\le \max(a_i, b_i)\),则 \(|b_{n + 1} - a_{n + 1}|\) 的值可以为 0;否则选择的被复制的数一定在集合 \(\{a_i\} +\{b_i\}\) 中,选择其中与 \(b_{n + 1}\) 最接近的数复制并计算代价即可。

//
/*
By:Luckyblock
*/
#include <bits/stdc++.h>
#define LL long long
const int kN = 2e5 + 10;
//=============================================================
int n, a[kN], b[kN];
//=============================================================
//=============================================================
int main() {
  //freopen("1.txt", "r", stdin);
  std::ios::sync_with_stdio(0), std::cin.tie(0);
  int T; std::cin >> T;
  while (T --) {
    std::cin >> n;
    for (int i = 1; i <= n; ++ i) std::cin >> a[i];
    for (int i = 1; i <= n + 1; ++ i) std::cin >> b[i];
    LL ans = 0, flag = 0;
    for (int i = 1; i <= n; ++ i) {
      ans += abs(a[i] - b[i]);
      if (std::min(a[i], b[i]) <= b[n + 1] && b[n + 1] <= std::max(a[i], b[i])) flag = 1;
    }
    if (!flag) {
      LL delta = 1e9;
      for (int i = 1; i <= n; ++ i) {
        delta = std::min(delta, 1ll * abs(b[n + 1] - a[i]));
        delta = std::min(delta, 1ll * abs(b[n + 1] - b[i]));
      }
      ans += delta;
    }
    std::cout << ans + 1 << "\n";
  }
  return 0;
}

C

排序。

读错题了唐唐唐唐唐——获得了一道新题哈哈,什么时候需要就放上去。

首先假设 \(n + m + 1\) 个人全部到来,按照题意进行模拟找到其较优岗位并求得贡献之和。

然后按照到来顺序,分别枚举每个岗位中的人 \(i\),记该岗位人数上限为 \(k\):

  • 若这个人之前已经有 \(k\) 个人入职,则这个人不来贡献减少 \(\min(a_i, b_i)\)。
  • 若这个人之前不到 \(k\) 个人入职,且以该岗位为较优岗位的人少于 \(k\) 个,则这个人不来贡献减少 \(\max(a_i, b_i)\)。
  • 否则这个不来一定会使得第 \(k\) 个人入职该岗位,则贡献变化量为 \(-\max(a_i, b_i) + \max(a_{k}, b_{k}) - \min(a_k, b_k)\)。

讨论即可,总时间复杂度 \(O(n+m)\) 级别。

//
/*
By:Luckyblock
*/
#include <bits/stdc++.h>
#define LL long long
#define pii std::pair<int,int>
#define mp std::make_pair
const int kN = 2e5 + 10;
//=============================================================
int n, m;
LL sum, ans[kN];
std::vector<int> aa, bb;
int a[kN], b[kN], c[kN];
//=============================================================
//=============================================================
int main() {
  // freopen("1.txt", "r", stdin);
  std::ios::sync_with_stdio(0), std::cin.tie(0);
  int T; std::cin >> T;
  while (T --) {
    std::cin >> n >> m;
    sum = 0;
    aa.clear(), bb.clear();

    for (int i = 1; i <= n + m + 1; ++ i) std::cin >> a[i];
    for (int i = 1; i <= n + m + 1; ++ i) {
      std::cin >> b[i];
      c[i] = abs(a[i] - b[i]); 
      sum += std::min(a[i], b[i]);
    }

    int cnta = 0, cntb = 0;
    for (int i = 1; i <= n + m + 1; ++ i) {
      if (a[i] > b[i]) {
        ++ cnta;
        if (cnta <= n) sum += a[i] - b[i];
        aa.push_back(i);
      } else {
        ++ cntb;
        if (cntb <= m) sum += b[i] - a[i];
        bb.push_back(i);
      }
    }

    for (int i = aa.size() - 1; i >= n; -- i) ans[aa[i]] = sum - b[aa[i]];
    if ((int) aa.size() <= n) {
      for (int i = 0; i < (int) aa.size(); ++ i) ans[aa[i]] = sum - a[aa[i]];
    } else {
      for (int i = n - 1; i >= 0; -- i) ans[aa[i]] = sum - a[aa[i]] + c[aa[n]];
    }

    for (int i = bb.size() - 1; i >= m; -- i) ans[bb[i]] = sum - a[bb[i]];
    if ((int) bb.size() <= m) {
      for (int i = 0; i < (int) bb.size(); ++ i) ans[bb[i]] = sum - b[bb[i]];
    } else {
      for (int i = m - 1; i >= 0; -- i) ans[bb[i]] = sum - b[bb[i]] + c[bb[m]];
    }
    
    for (int i = 1; i <= n + m + 1; ++ i) std::cout << ans[i] << " ";
    std::cout << "\n";
  }
  return 0;
}

D

括号序列,枚举。

好玩题,场上一直想着怎么拆成两半拼起来了,还能这么想的 oonp。

写在最后

参考:

学到了什么:

  • D:括号序列的又一种数形结合的模型转换。

标签:std,Educational,Rated,bb,int,sum,Codeforces,cin,lst
From: https://www.cnblogs.com/luckyblock/p/18224261

相关文章

  • Educational Codeforces Round 151 (Rated for Div. 2) E
    链接凌晨两点半突然醒了。。然后睡不着了。。躺了一个半小时决定起来啃题解。花了一个小时弄懂了。但是要怎么自己想到还没想好。这个属于计数dp的范围了,我不是很熟悉了。题目大意:有n个盒子,里面装了一些球,球的数量大于等于1且小于n。可以进行一种操作,每次操作可以把一个球移......
  • codeforces round 948(Div2)
    A题目过简单,略B.构造+二进制点击查看代码#include<bits/stdc++.h>#defineLLlonglongLLx,ans[40];boolyes[40];intmain(){std::ios::sync_with_stdio(0),std::cin.tie(0);intT;std::cin>>T;while(T--){std::cin>>x;for(LLi......
  • Codeforces Round 948 (Div. 2)
    A.LittleNikita题意:\(n\)步操作,\(+1\)或\(-1\),最终结果是否等于\(m\)思路:设\(+1\)的操作次数为\(x\),\(-1\)的操作次数为\(y\)\[x+y=n\\x-y=m\]\[x=(n+m)/2\\y=(n-m)/2\]\((n-m)\)和\((n+m)\)均为偶数,即\(n\)和\(m\)均为偶数或同为奇数,且\(n>=m\)代码:voidsolve()......
  • Codeforces Round 948 (Div. 2) B - C
    总结:做了A,B,然后开局A看错题wa了一发,B出的又很慢,所以掉大分。总的来说还是c没开出来。B.BinaryColouring1.题目大意:给你一个int范围内的数x,要求构造一个二进制串,能有-1、1、0,二进制串的值不能出现两个连续的地方不为0,二进制串的值要等于x。2.思路分析:我们可以发现,对于x的......
  • POSEIDON: Privacy-Preserving Federated NeuralNetwork Learning
    写在最前面,感觉这一篇的技术更贴近于密码学,所以部分核心技术读起来比较吃力。仅供大家参考哇~Abstract—Inthispaper,weaddresstheproblemofprivacypreservingtrainingandevaluationofneuralnetworksinanN-party,federatedlearningsetting.Weproposea......
  • codeforces round 948(div.2)
    https://m1.codeforces.com/contest/1977A:题意:小男孩尼基塔得到了一些立方体作为礼物。他决定用它们建一座塔。一开始,塔上没有任何立方体。在一次移动中,尼基塔要么正好把1 个立方体放到塔顶,要么正好从塔顶移走1个立方体。有没有可能在走了n 步之后,塔顶正好有m 个立......
  • Codeforces Round 927 (Div. 3) D. Card Game 题解 贪心
    CardGame题目描述Twoplayersareplayinganonlinecardgame.Thegameisplayedusinga32-carddeck.Eachcardhasasuitandarank.Therearefoursuits:clubs,diamonds,hearts,andspades.Wewillencodethemwithcharacters‘C’,‘D’,‘H’,......
  • Codeforces Round #947 题解 (A~G)
    目录A.BazokaandMocha'sArrayB.378QAQandMocha'sArrayC.ChamoandMocha'sArrayD.PainttheTreeE.ChainQueriesF.SetG.ZimphaFanClubA.BazokaandMocha'sArray枚举每个循环移位判断.B.378QAQandMocha'sArray首先最小的数肯定得选,删掉最小的数的倍数......
  • Codeforces Round 947 (Div. 1 + Div. 2) E. Chain Queries
    本来决定开摆养生不打的,但11点半的时候点进去看到这个题是个疑似DS,写题的欲望瞬间高涨,然后就40min写了这个题然而赛中并不能提交,只好等到第二天早上再交一发,没想到还WA了一发才过首先这题如果我们能确定当前黑色点集的链的两个端点\(x,y\)的话,这个题就非常显然了只需要求出\((x......
  • 24.2.13 ~ 4.13 Codeforces Round 925 & 926 & 934 & 939 (Div.3 / Div.2 * 3)
    925Div.3Solve:A~G(7/7)Rank:95Rating:\(0+706=706\)(\(1400+206=1606\))发挥评价:Normal+本场没什么有价值题目。926Div.2Solve:A~DF(5/6)Rank:72Rating:\(706+575=1281\)(\(1606+225=1831\))发挥评价:Good本场没有什么失误。CF1929E*2300(me*2300)选......