首页 > 其他分享 >CF补题 993-Div.4

CF补题 993-Div.4

时间:2024-12-22 19:41:43浏览次数:3  
标签:cout int cin long CF 补题 tie streampreset Div.4

CF补题 993-Div.4-20241221

Dashboard - Codeforces Round 993 (Div. 4) - Codeforces

A:

题目大意:给出一个 \(n\) ,求有多少有序正整数数对 \((a,b)\),使得 \(a=n-b\)

#include <iostream>
#define streampreset() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;

int main()
{
    streampreset();
    int T;
    cin >> T;
    while (T--)
    {
        int n;
        cin >> n;
        cout << n - 1 << endl;
    }
    return 0;
}

经典数学小知识

B:

题目大意:给出一个由 p,q,w 组成的字符串,求它的镜像串

#include <iostream>
#include <string>
#define streampreset() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;

int main()
{
    streampreset();
    int T;
    cin >> T;
    while (T--)
    {
        string a;
        cin >> a;
        for (int i = a.size() - 1; i >= 0; i--) {
            if (a[i] == 'q') cout << 'p';
            else if (a[i] == 'p') cout << 'q';
            else cout << a[i];
        }
        cout << endl;
    }
    return 0;
}

正序输入,倒序输出,p,q 翻转 w 不变

C:

题目大意:\(2*m\) 个座位有 \(a+b+c\) 只猴子,\(a\) 猴子只能坐第一排, \(b\) 猴子只能坐第二排,\(c\) 猴子随便坐,求最大能坐下的猴子数

#include <iostream>
#include <algorithm>
#define streampreset() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;

int main()
{
    streampreset();
    int T;
    cin >> T;
    while (T--)
    {
        int m, a, b, c;
        int ans = 0;
        cin >> m >> a >> b >> c;
        ans+=min(a,m);
        ans+=min(b,m);
        ans+=min(2*m-min(a,m)-min(b,m),c);
        cout<<ans<<endl;
    }
    return 0;
}

贪心,首先安排 \(a,b\) 猴子,剩下的座位就是 \(c\) 猴的

D:

题目大意:给出一个序列a,构造一个序列b使得 \(a_i\) 是 \(1\le i \le n\) 上的 \([b_1,b_2...b_i]\) 的模,模指的是一个序列中出现次数最多的数(众数)

#include <iostream>
#define streampreset() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;

int a, st[200010];
int n;

int main()
{
	streampreset();
	int T;
	cin >> T;
	while (T--)
	{
		memset(st, 0, sizeof st);
		cin >> n;
		int d = 1;
		for (int i = 1; i <= n; i++) {
			cin >> a;
			while (st[d]) d++;//定位
			if (st[a]) {
				cout << d << ' ';//如果出现过,就填d
				st[d]++;
			}
			else {
				cout << a << ' ';没有出现过,就填a
				st[a]++;
			}
		}
		cout << endl;
	}
	return 0;
}

脑筋急转弯,只要我们保证每次出现的数都不重复,即每个数都只出现一次,那么所有的数都是这个序列的模

所以我们维护一个状态序列,每次判断当前的 \(a_i\) 是否出现过,如果出现过,就使 \(b_i\) 为一个从未出现过的数,如果没有出现过,我们就把他加入序列

每次循环前,都要将d定位到没有出现过的数上

E:

题目大意:对 \(x,y\) 两个正整数,给定两个区间 l1,r1,l2,r2 和一个底数 k ,求满足 \(\frac{y}{x}=k^n\) 的 \((x,y)\) 有序对数

#include <iostream>
#include <algorithm>
#include <math.h>
#define streampreset() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;

int main()
{
	streampreset();
	int T;
	cin >> T;
	while (T--)
	{
		long long k, la, ra, lb, rb;
		cin >> k >> la >> ra >> lb >> rb;
		long long sum = 1;
		long long ans = 0;
		long long u, v;
		while (sum <= rb) {
			
			long long i = la - 1, j = ra + 1;
			while (i + 1 != j)
			{
				long long mid = (i + j) >> 1;
				if (mid * sum >= lb) j = mid;//
				else i = mid;
			}
			u = j;//取分界右侧
			
			i = la - 1, j = ra + 1;
			while (i + 1 != j)
			{
				long long mid = (i + j) >> 1;
				if (mid *sum > rb) j = mid;
				else i = mid;
			}
			v = i;//取分界左侧
			
			if (u <= v) ans += v - u + 1;
			sum *= k;
		}
		cout << ans << endl;
	}
	return 0;
}

\(\frac{y}{x}=k^n\) 可变形为 \(y=x*k^n\), \(x=\frac{y}{k^n}\) ,我们已知 \(x,y\) 的取值范围,通过枚举 \(n\) 再二分查找 \(x\) 的边界

枚举 \(n\) 只需要枚举到 \(k^n\le y_{max}\) ,因为超过界限后,左右边界都为 \(0\) 无意义

二分找 \(x\) 的边界,分别求满足 \(x*k^n=y_{min}\) 和 \(x*k^n=y_{max}\) 的\(x_u,x_v\)

最后答案加上 \(\sum_{u}^{v}(x)\) 即可,复杂度大约在 \(O(n\log n)\) 左右

标签:cout,int,cin,long,CF,补题,tie,streampreset,Div.4
From: https://www.cnblogs.com/dianman/p/18622435

相关文章

  • CF1324F Maximum White Subtree
    看到题目最直接的想法就是以每个节点为根进行nnn次树形dp......
  • 【学习】lazarus的Laz2_XMLCfg用法
    lazarus的lpi等文件都是使用XML格式,使用Laz2_XMLCfg可以方便读写这类XML配置文件。0、在uses添加Laz2_XMLCfg单元。1、下面的例子是读取ProjectOptions/Units所有unit中FileName<?xmlversion="1.0"encoding="UTF-8"?><CONFIG><ProjectOptions><Units><......
  • CF2040D 题解
    构造题做得较少,所以性质观察得较慢。值域给的\(2n\)非常诡异,想到考虑\(2\)的倍数。按深度记录下每层结点,发现隔一层依次按\(2\)的倍数填充,即可满足。即:先填奇数层,再填偶数层。但是连续的偶数是不能相邻的,发现当深度在\([2,4]\)时,无论以何顺序按层填充,都会有问题。处......
  • CF1548A Web of Lies 题解
    WebofLies题解洛谷。Codeforces。题意比较直接,就不复述了。思路分析题意首先根据操作3,删人只是暂时的,可以分析出每次删的人对于后面都没有影响。关注到这个词:执行以下操作直至不可再执行为止。显然,在整个图中所有该被删除的人都逃不掉,迟早被删除。那么看看什么样......
  • CF994 Review
    CF994Review好久没写过反思了,可能是前几场打的比较好,或者说这场打的太差了/笑哭。反正是掉大分了。问题A题写的太急了,直接WA两发,-100。没出\(C\),但是一直就耗在\(C\)上了。实际上\(D\)要好写得多,自己下来半个小时左右想+写就可以完成了。并且这一场\(D\)的分数明显......
  • CF2049D 题解
    CF2049D题解题意给定一个\(n\timesm\)的数字矩阵和常数\(K\),初始位于\((1,1)\)点,只能通过向下或者向右走来到达\((n,m)\)点。存在某种操作,可以选择任意一行,将其所有列元素逆时针旋转\(1\)个单位,这个操作可以对任意行进行任意次(下面称这个操作为“旋转”)。设最后......
  • CF2049C 题解
    CF2049C题解关于MEX的构造题。题意有一个\(n\)元环,每个元素都和它的相邻元素是“朋友”。此外,额外给定一组\(x,y\),\(x\)和\(y\)彼此也是“朋友”。求一种给\(n\)个元素填数的方案,使得对于任意一个\(i\in[1,n]\),填在\(i\)这个位置的数\(a_i\),是它所有“朋友”的......
  • CNCF云原生生态版图-分类指南(四)- 编排和管理
    CNCF云原生生态版图-分类指南(四)-编排和管理CNCF云原生生态版图-分类指南四、编排和管理(Orchestration&Management)(一)调度和编排(Scheduling&Orchestration)1.是什么?2.解决什么问题?3.如何解决问题?4.使用的技术5.项目和产品整体介绍(二)API网关(APIGateway)1.是什么......
  • 2024年CCF 非专业级软件能力认证CSP-J/S 第二轮( 提高组) 染色(color)
    完整题目内容可前往下方链接:染色(color)_C++_嗨信奥-玩嗨信息奥林匹克竞赛-少儿编程题库学习中心https://www.hixinao.com/tiku/cpp/show-4118.html若需更多真题,可前往题库中心查找,题库中心涵盖白名单赛事真题,考级真题,可节省找题时间,助力备考~嗨信奥-玩嗨信息奥林匹克竞赛......
  • 【恶意软件检测-CCFA文章】SDAC:使用基于语义距离的 API 集群进行 Android 恶意软件检
    ​SDAC:使用基于语义距离的API集群进行Android恶意软件检测的慢老化解决方案摘要提出了一种名为SDAC的新型缓慢老化解决方案,用于解决Android恶意软件检测中的模型老化问题,该问题是由于在恶意软件检测过程中未能适应Android规范的变化所致。与现有解决方案中的检测模......