首页 > 其他分享 >CF Round 920 (Div. 3) 笔记

CF Round 920 (Div. 3) 笔记

时间:2024-06-09 23:45:04浏览次数:26  
标签:int text ll texttt CF cin 920 操作 Div

CF Round 920 (Div. 3) 笔记

前言

关于这个新系列,是我们的老师推荐给我们的。他说,多打 Codeforces 的比赛能增长我们的实战知识,提升我们的实力。我当然是非常相信的,因为老师说能提升 \(200\) 多分,从 \(\text{CSP-J }100\) 多分的蒟蒻变成 \(300\) 多分的大佬。那么,我会持续出 Codeforces 打虚拟赛的心得并坚持出这个系列,看看我会有怎样的收获和变化。(希望早日拿到蓝勾!)

本场比赛难度为 \(\text{Div.3}\),据说稳定做出四道题是 \(\text{CSP-J }1=\) 水平。

战绩

\(\text{AC}\) 了前四题,第五题做出来一半,最后还是没有想出来平局的情况。

\(\text{Div.3}\) 做出来四题,好像还行?不过第四题在洛谷提前做过。

题目分析

\(\text{A}\) 题 \(\color{#FE4C61}\texttt{CF1921A Square}\)

题面概括

给定正方形四个点的坐标,正方形的边平行于 \(x\) 或 \(y\) 轴,求正方形面积。

赛时思路

既然是一个正方形,那么只要求出一条边的边长 \(a\),就可以求得面积 \(a^2\)。那么我们只要找到两条 \(x\) 轴或 \(y\) 轴相等的点,再计算他们另一个维度的差,就可以了。\(x\) 轴或 \(y\) 轴相等意味着这两个点构成了一条边,而不是对角线。

\(\text{Code:}\)

#include <bits/stdc++.h>
using namespace std;

struct node {
    int x, y;
}a[5];

int T;

int main() {
    cin >> T;
    while (T --) {
        for (int i = 1; i <= 4; i++) 
            cin >> a[i].x >> a[i].y;
        for (int i = 1; i <= 4; i++) {
        	for (int j = 1; j < i; j++) {
                if (a[j].x == a[i].x) {
                    cout << abs(a[j].y - a[i].y) * abs(a[j].y - a[i].y) << "\n";
                    goto nxt;
                }
                if (a[j].y == a[i].y) {
                    cout << abs(a[j].x - a[i].x) * abs(a[j].x - a[i].x) << "\n";
                    goto nxt;
                }
            }
		}
        nxt:;
    }
    return 0;
}

个人总结

考查的是平面几何计算。较为简单,比赛时最好的方法是把图画出来,能更直观地思考。

\(\text{B}\) 题 \(\color{#FE4C61}\texttt{CF1921B Arranging Cats}\)

题面概括

有两个字符串 \(f,b,f_i,b_i\in\{0,1\}\)。需要用最少的操作次数将 \(b\) 变为 \(f\)。有三种操作:

  • 将 \(0\) 变为 \(1\)。

  • 将 \(1\) 变为 \(0\)。

  • 将两个不同字符交换位置。

赛时思路

先考虑比较简单的两种修改操作。我们可以想到,一位一位对比,只要不一样,就使用一次修改操作。

接着再考虑交换操作。发现交换操作是将两个位置的字符反转,即 \(1\) 变为 \(0\),\(0\) 变为 \(1\)。这不就相当于做了两次修改操作吗?也就是说,一次交换操作可以替换两次修改操作。但是替换的是一个 \(0\) 变 \(1\),一个 \(1\) 变 \(0\),而不能是两个同一种操作,因为交换操作是将两个不同的数交换。

假设将 \(0\) 变为 \(1\) 的操作数为 \(\text{moveTo1}\),将 \(1\) 变为 \(0\) 的操作数为 \(\text{moveTo0}\),则两者重合的部分,即较小值为可以用交换操作解决的部分。两者之差为多出来的需要单独处理的部分,那么答案就是 \(\max\{\text{moveTo0,moveTo1}\}\)。

\(\text{Code:}\)

#include <bits/stdc++.h>
using namespace std;

int T;

int main() {
    cin >> T;
    while (T --) {
    	int n;
        string b, f;
        cin >> n >> b >> f;
        int moveTo0 = 0, moveTo1 = 0;
        for (int i = 0; i < n; i++) {
            if (b[i] != f[i] && b[i] == '0') moveTo1++;
            if (b[i] != f[i] && b[i] == '1') moveTo0++;
        }
        cout << max(moveTo0, moveTo1) << "\n";
    }
    return 0;
}

个人总结

比较简单的题,对于多种操作,可以先从简单的操作入手。

\(\text{C}\) 题 \(\color{#F39C11}\texttt{CF1921C Sending Messages}\)

题面概括

手机有 \(f\) 的电量,有 \(n\) 个消息要回复,第 \(i\) 个信息在 \(m_i\) 秒。可以选择一直开着机,每秒耗费 \(a\) 电量。也可以先关机,等到要回复的时候再开机。关机操作耗费 \(b\) 电量。问是否能回复所有的信息。

赛时思路

有两种操作,容易想到取消耗较小的一个。第 \(i\) 个信息遇上一个信息间隔的时间为 \(m_i-m_{i-1}\),则开机的消耗为 \(a\cdot(m_i-m_{i-1})\)。关机的消耗为 \(b\)。我们只需在开机和关机两种情况中取最小值即可,一旦 \(f\) 小于等于 \(0\),就没电了,输出 \(\texttt{NO}\)。直到最后如果手机还有电,输出 \(\texttt{YES}\)。

\(\text{Code:}\)

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int N = 2e5 + 5;

int T;
ll m[N];

int main() {
    cin >> T;
    while (T --) {
        ll n, f, a, b;
        cin >> n >> f >> a >> b;
        for (int i = 1; i <= n; i++)
            cin >> m[i];
        bool flag = 1;
        for (int i = 1; i <= n; i++) {
            ll t = m[i] - m[i - 1];
            if (t * a <= b) {
                f -= t * a;
                if (f <= 0) {
                    cout << "NO\n";
                    flag = 0;
                    break;
                }
            }
            else {
                f -= b;
                if (f <= 0) {
                    cout << "NO\n";
                    flag = 0;
                    break;
                }
            }
        }
        if (flag) cout << "YES\n";
    }
    return 0;
}

\(\text{D}\) 题 \(\color{#F39C11}\texttt{CF1921D Very Different Array}\)

这道题打比赛之前居然做过。

题面概括

在 \(b\) 中选出 \(n\) 个数以任意顺序组成序列 \(c\),使得 \(D=\sum _{i=1}^n \left\vert a_i-c_i \right\vert\) 最大。输出 \(D\) 即可。

赛时思路

容易想到用最值相减,即 \(a\) 的最大值减去 \(b\) 的最小值,或 \(b\) 的最大值减去 \(a\) 的最小值。容易发现这些数值在序列中是一一对应的,即 \(a_i\) 对应 \(b_{m-i+1}\),同时也对应 \(b_{n-i+1}\)。取较大值即可。

\(\text{Code:}\)

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int N = 2e5 + 5;

ll T, n, m, a[N], b[N];

int main() {
    cin >> T;
    while (T --) {
        cin >> n >> m;
        for (int i = 1; i <= n; i++) cin >> a[i];
        for (int i = 1; i <= m; i++) cin >> b[i];
        ll ans = 0;
        sort(a + 1, a + 1 + n);
        sort(b + 1, b + 1 + m);
        for (int i = 1; i <= n; i++)
            ans += max(abs(a[i] - b[n - i + 1]), abs(a[i] - b[m - i + 1]));
        cout << ans << "\n";
    }
    return 0;
}

小结

这次比赛整体不错,感觉打 CF 比赛确实会有进步。继续坚持吧!

再见!

标签:int,text,ll,texttt,CF,cin,920,操作,Div
From: https://www.cnblogs.com/Weekoder/p/18240256

相关文章

  • 模访京东商城jQuery省市区三级联动选择(横向DIV)
    效果如下图在开优网络提供的代码包的基础上修改,采用了2024年民政部发部的行政区划代码数据,区域更全面,且压缩了长度,为原代码的一半大小,整所数包只有100KB了,并修改了配色,比常用的三级SELECT控件联动要好看的多.代码下载地址:https://download.csdn.net/download/rovecat/89415035......
  • abc--cf训练日常总结
    ABC最近遇到好多思维和位运算的题目不会做,特地过来总结一些小小的知识点。思维题目https://atcoder.jp/contests/abc353/tasks/abc353_c这道题目要求我们计算连续的两个相邻的数组元素之和。我一开始用暴力,后面换了种错误的思路就wa了。其实这道题目是求和,然后找到和大于1e8......
  • 最新区块链论文速读--CCF A会议 CCS 2023 共25篇 附pdf下载(3/4)
    Conference:ACMConferenceonComputerandCommunicationsSecurity(CCS)CCFlevel:CCFACategories:networkandinformationsecurityYear:2023Num:25第1~7篇区块链文章请点击此处查看第8~13篇区块链文章请点击此处查看14Title: FuzzontheBeach:FuzzingSo......
  • CF1552G A Serious Referee 题解
    题目链接点击打开链接题目解法感觉很神奇的题首先把序列当成排列做首先发现只要当成\(01\)序列做就是对的为什么?你假设有数\(x<y\),你把\(\lex\)的数设成\(0\),\(>x\)且\(\ley\)的数设成\(1\),\(>y\)的数设成\(2\),然后做题目中的排序操作,如果最终序列形成逆序......
  • CF717G Underfail 题解
    题意:若干区间,区间有权值,选择一个子集,使得权值和尽量大并且每个点不被覆盖超过\(x\)次。\(n\le500\)思路:很神奇的一道题。我们考虑费用流,如果单纯的一边是区间一边是点的话其实并不好做,所以这道题我们直接建一排\(n+2\)个点,一个区间\(l,r\)就从\(l\)到\(r+1\)连......
  • CCF-GESP 等级考试 2023年9月认证C++四级真题解析
    一、单选题(每题2分,共30分)第1题⼈们所使⽤的⼿机上安装的App通常指的是()。A.⼀款操作系统B.⼀款应⽤软件C.⼀种通话设备D.以上都不对正确答案:B.⼀款应⽤软件解析:App是"Application"的缩写,中文意思是"应用",特指安装在智能手机上的第三方应用软件。这些软件通常......
  • 数学模型:操作系统中FCFS、SJF、HRRN算法的平均周转时间比较 c语言
    摘 要研究目的:比较操作系统中进程调度FCFS、SJF、HRRN算法的平均周转时间和带权周转时间的大小关系。研究方法:在建模分析时,分别举4个进程的例子,1个进程用两个字母分别表示到达时间和执行时间。分两种极端情况,一种是每个进程到达时cpu还在执行之前的进程,这种结果为T(FCFS)>T......
  • Codeforces Round 951 (Div. 2)
    A题没什么好说的。B题目读懂了基本就会了。首先很明显,如果x和y的某一位不一样,那这两位异或同一个数字自然也是不一样的。所以要做的就是找到二进制里面最长的连续相同的数量。这个时候看看样例,148全是2的整数次方,33554432,计算器算一下,发现居然也是。那就非常明显了。直接......
  • 纯CSS+单个div实现抖音LOGO
    纯CSS+单个div就能绘制抖音LOGO关键点:主要借助了两个伪元素实现了整体结构,借助了drop-shadow生成一层整体阴影drop-shadow只能是单层阴影,所以另一层阴影需要多尝试contrast(150%)brightness(110%)则可以增强图像的对比度和亮度,更贴近抖音LOGO的效果预览结果如下:在线......
  • CF1192B Dynamic Diameter 题解
    思路静态\(\text{toptree}\)板子题。定义我们使用簇来表示树上的一个连通块。可以按照如下方式定义一个簇:一个簇可以表示为三元组\((u,v,E)\),其中\(u,v\)为树的节点,称为簇的界点,\(E\)为一个边的集合,表示该簇包含的边,路径\((u,v)\)称作簇路径。\(u,v\)分别为上界......