Codeforces Round #772 (Div. 2)

news2024/12/24 2:20:45

A. Min Or Sum

题目链接:Problem - A - Codeforces

 样例输入:

4
3
1 3 2
5
1 2 4 8 16
2
6 6
3
3 5 6

样例输出:

3
31
6
7

题意:给你一个长度为n的数组,我们可以对这个数组进行操作,每次操作可以选择两个不同的下标i和j,可以用一个x和y替代a[i]和a[j],前提是x|y等于a[i]|a[j]。问操作后数组的和的最小值是多少。

分析:对于a[i]和a[j],如果对于两者的二进制表示中的第k位都为1,那么我们可以令x的二进制表示中的第k位为1,y的二进制表示中的第k位为0,那么这样就能使得总和减少2^(k-1),按照这个思路我们可以整体讨论,对于第k位而言,如果数组中所有的数都为0,那么操作后的数组中该位也都为0,但是如果存在一些数在该位为1,那么我们可以设法将这些数中的1消掉,但是至少会保留一个,那么也就是说对于存在的1,我们可以只保留一个,那么答案就是所有的数直接或起来的结果。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		scanf("%d",&n);
		int ans=0,t;
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&t);
			ans|=t;
		}
		printf("%d\n",ans);
	}
	return 0;
}

B. Avoid Local Maximums

题目链接:Problem - B - Codeforces

 样例输入:

5
3
2 1 2
4
1 2 3 1
5
1 2 1 2 1
9
1 2 1 3 2 3 1 2 1
9
2 1 3 1 3 1 3 1 3

样例输出:

0
2 1 2
1
1 3 3 1
1
1 2 2 2 1
2
1 2 3 3 2 3 3 2 1
2
2 1 3 3 3 1 1 1 3

题意:给你一个长度为n的数组,你可以替换其中任意一个数,问最少的操作次数使得数组满足对于任意一个下标1<i<n均没有a[i]>a[i-1]和a[i]>a[i+1]同时满足。

分析:我们直接遍历数组,遇到一个i同时满足a[i]>a[i-1]和a[i]>a[i+1]的就把a[i+1]变为max(a[i],a[i+2])即可。统计一下答案直接输出即可。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
const int N=2e5+10;
int a[N];
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
			scanf("%d",&a[i]);
		int ans=0;
		for(int i=2;i<n;i++)
		{
			if(a[i]>a[i-1]&&a[i]>a[i+1])
			{
				a[i+1]=max(a[i],a[i+2]);
				ans++;
			}
		}
		printf("%d\n",ans);
		for(int i=1;i<=n;i++)
			printf("%d ",a[i]); 
		puts("");
	}
	return 0;
}

C. Differential Sorting

题目链接:Problem - C - Codeforces

样例输入: 

3
5
5 -4 2 -1 2
3
4 3 2
3
-3 -2 -1

样例输出:

2
1 2 3
3 4 5
-1
0

题意:给你一个长度为n的数组,你的目的是要把这个数组变为一个非递降的数组,每次操作可以选择三个下标i,j,k满足1<=i<j<k<=n,然后将a[i]用a[j]-a[k]替换,如果能实现就输出操作次数及操作方法,否则输出-1。

分析:假如a[n-1]<=a[n]并且a[n-1]-a[n]<=a[n-1],那么我们就可以把前n-2个数直接变成a[n-1]-a[n-2],这样的话就直接满足题意了。

如果a[n-1]>a[n],那显然是不满足题意的,因为我们没法修改第n-1个数,所以无论怎样操作数组都不可能变为一个非递降数组。

a[n-1]-a[n]<=a[n-1]等价于a[n]>=0,假如a[n]<0,那么我们肯定不会用第n个数来改变前面的数,那样只会使得前面的数越来越大。而且前面的数必须要是负数,因为只要有正数,那么这个正数要想变为负数必须利用其后面的正数,但是后面的正数也需要变为负数,当然这是不可能永远成立的,所以通过操作使得数组非递降也是不行的,只有不操作,也就是原来就是非递降的那样才能满足题意。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
const int N=2e5+10;
int a[N];
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
			scanf("%d",&a[i]);
		if(n==1) puts("0");
		else if(a[n]<0)
		{
			bool flag=true;
			for(int i=1;i<n;i++)
				if(a[i]>a[i+1]) flag=false;
			if(!flag)
				puts("-1");
			else
				puts("0");
		}
		else
		{
			if(a[n-1]<=a[n])
			{
				printf("%d\n",n-2);
				for(int i=1;i<=n-2;i++)
					printf("%d %d %d\n",i,n-1,n);
			}
			else
				puts("-1");
		}
	}
	return 0;
}

D. Infinite Set

题目链接:Problem - D - Codeforces

样例输入: 

2 200000
48763 1000000000

样例输出:

448201910

题意:初始时给定n个不同的数构成一个集合,现在对这个集合进行扩展,假如x属于这个集合,那么2*x+1和4*x也是属于这个集合的,现在给定一个p,问小于2^p的元素有多少个是在这个集合中的。

分析:我们先来看一下2*x+1和4*x有什么规律,往二进制上考虑的话我们可以发现前者是往x的二进制数位后添一个1,而后者是添2个0.再加上问的是小于2^p的元素的个数,所以我们就可以往二进制方面上考虑这个问题。设想我们有一个区间[l,r],其中值位于该区间内的数任意两个之间都不会相互生成,那么我们可以用这个区间内的数去生成别的区间内的数,比如区间[2*l+1,2*r+1]以及区间[4*l,4*r]。所以这就给了我们一个启发,那就是按照二进制进行动态规划。

设f[i]表示二进制表示有i位的数中在集合中的数的个数

那么就有关系式f[i]=f[i]+f[i-1]+f[i-2]

包含f[i-2]很好理解,就是通过乘以4得到,包含f[i-1]也很好理解,就是通过乘以2然后加1得到。为什么还会包含f[i]自己呢?因为一开始给定的n个数中可能存在某些数是由i位二进制表示的且不能由比他小的数扩展得到,所以一开始f[i]的值不一定为空。

最后就剩下一个问题了,就是f的初始化问题,我们就是利用给定的n个数进行初始化,把可以相互产生的数去掉较大的那个,这样就可以进行转移了。怎样判断两个数是否存在生成关系也很简单,首先可以确定的是一定是小数生成大数。那么我们从低位往高位分析大数的二进制位,如果是1,那么就把这个1去掉,然后判断这个数是否在n个数中出现过,如果出现过,那么这个大数就可以被生成,那么就不需要计数,如果是0,那么我们需要再往前看一位,如果还是0,说明是两个00相连,那么就一块去掉,再判断去掉后的数是否出现过。如果是1,那么直接返回就行了,因为末尾是10的是不可能被其他数生成的,所以直接将原数记录即可。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
const int N=2e5+10,mod=1e9+7;
int f[N],a[N];//f[i]表示二进制表示有i位的数中在集合中的数的个数 
int cal(int x)
{
	int cnt=0;
	while(x)
	{
		cnt++;
		x/=2;
	}
	return cnt;
}
int main()
{
	int n,p;
	cin>>n>>p;
	map<int,int>mp;
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]),mp[a[i]]=1;
	for(int i=n;i>=1;i--)
	{
		int cnt=cal(a[i]);
		int t=a[i];
		for(int j=0;j<cnt;j++)
		{
			if(a[i]>>j&1) t/=2;
			else if(a[i]>>(j+1)&1) break;//10结尾 
			else t/=4,j++;
			if(mp[t]) break;
		}
		if(!mp[t]||t==a[i]||t==0) f[cal(a[i])]++;
	}
	int ans=f[1];
	for(int i=2;i<=p;i++)
	{
		f[i]=(f[i]+f[i-1])%mod;
		if(i>2) f[i]=(f[i]+f[i-2])%mod;
		ans=(ans+f[i])%mod;
	}
	printf("%d",ans);
	return 0;
}

E. Cars

题目链接:Problem - E - Codeforces

 样例1输入:

4 4
1 1 2
1 2 3
2 3 4
2 4 1

样例1输出:

YES
R 0
L -3
R 5
L 6

样例2输入:

3 3
1 1 2
1 2 3
1 1 3

样例2输出:

NO

题意:现在有n辆汽车在一个坐标轴上,每辆汽车有一个行驶方向和一个初始坐标,现在给出m个限制,一个是相关,另一个是不相关,汽车u和v相关指的是无论汽车u和v的速度如何,他们都一定会相遇的,不相关指的就是无论汽车u和v的速度如何,他们都一定不会相遇。现在给出m对关系,每对关系给出两个汽车并指出是否相关,问是否可以同时满足m个关系,如果可以输出n辆汽车的初始方向和初始坐标。

分析:首先我们来看一下汽车u和v相关满足的条件,既然说了无所谓速度,那么他俩要想相遇必然要满足方向相反而且要使得向右行驶的汽车的坐标偏小,因为同向可能不会相遇。同理汽车u和v不相关需要满足的条件就是方向相反而且要使得向右行驶的汽车的坐标偏大。

可以发现,无论两辆汽车是否相关,他们的行驶方向都一定是相反的,只是坐标的大小关系不同。那么我们可以根据m个汽车的关系建立一个图,来表明是否存在一个图可以同时满足m个限制条件,这个图的含义很简单,两点之间存在边说明这两个点代表的车的行驶方向是相反的,那么我们直接01染色判断是否存在合理染色方案即可,如果不存在那么说明一定不存在答案,如果存在一种合理染色方案那么我们还需要后续判断坐标是否合理,因为我前面说过,对于不同的关系,两辆车的坐标大小关系不同,我们可以再根据m个限制条件新建立一张图,这个图的含义如下:如果u到v有一条有向边,那么说明u的坐标比v的坐标小,根据刚才的关系分析我们也能很容易建起这么一张图,然后我们对这个图进行拓扑排序,然后直接按照拓扑序列直接从小到大分配坐标即可,如果存在环就输出无解,否则输出答案。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
const int N=5e5+10;
//c[i]=1/2代表第i个车的方向是向左/右 
int h[N],e[N],ne[N],c[N],idx;
int op[N],u[N],v[N];
int p[N],du[N];
void add(int x,int y)
{
	e[idx]=y;
	ne[idx]=h[x];
	h[x]=idx++;
}
bool dfs(int x,int color)
{
	c[x]=color;
	for(int i=h[x];i!=-1;i=ne[i])
	{
		int j=e[i];
		if(c[j]&&c[j]==color) return false;
		else if(c[j]) continue;
		dfs(j,3-color);
	}
	return true;
}
bool sort_top(int n)
{
	int tt=0;
	queue<int> q;
	for(int i=1;i<=n;i++)
		if(!du[i]) q.push(i);
	while(!q.empty())
	{
		int x=q.front();
		q.pop();
		p[x]=++tt;
		for(int i=h[x];i!=-1;i=ne[i])
		{
			int j=e[i];
			du[j]--;
			if(!du[j]) q.push(j);
		}
	}
	return tt==n;
}
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		h[i]=-1;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&op[i],&u[i],&v[i]);
		add(u[i],v[i]);
		add(v[i],u[i]);
	}
	for(int i=1;i<=n;i++)
	if(!c[i])
	{
		if(!dfs(i,1))
		{
			puts("NO");
			return 0;
		}
	}
	idx=0;
	for(int i=1;i<=n;i++) h[i]=-1;
	for(int i=1;i<=m;i++)
	{
		int l,r;//分别记录向左向右走的车辆的编号 
		if(c[u[i]]==1) l=u[i],r=v[i];
		else l=v[i],r=u[i];
		if(op[i]==1) add(l,r),du[r]++;
		else add(r,l),du[l]++; 
	}
	if(sort_top(n))
	{
		puts("YES");
		for(int i=1;i<=n;i++)
			printf("%c %d\n",c[i]==1?'L':'R',p[i]);
	}
	else puts("NO");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/144548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ThinkPHP5之文件包含审计分析(五)

说明 该文章来源于同事lu2ker转载至此处&#xff0c;更多文章可参考&#xff1a;https://github.com/lu2ker/ 文章目录说明0x00 环境准备0x01 测试代码0x02 代码分析0x03 总结参考链接&#xff1a;Mochazz/ThinkPHP-Vuln/ 影响版本&#xff1a;5.0.0<ThinkPHP5<5.0.18 、…

Java - JIT即时编译

java前端编译器和后端编译器的作用Java前端编译器&#xff1a;javac 编译&#xff0c;在程序运行前&#xff0c;将 源文件 转化为 字节码 即 .class 文件Java 程序最初只能通过解释器解释执行&#xff0c;即 JVM 对字节码逐条解释执行&#xff0c;因此执行速度比较慢。字节码与…

【SAP Abap】SAP Flight 航班系统数据模型简介(SCARR、SPFLI、SFLIGHT、SBOOK等)

SAP Flight 航班系统数据模型简介&#xff08;SCARR、SPFLI、SFLIGHT、SBOOK等&#xff09;1、本文目的2、数据模型3、查看模型数据4、生成演示数据5、模型应用1、本文目的 SAP ABAP 系统都会自带 Flight 航班系统数据模型&#xff0c;其大量应用于 SAP ABAP 帮助文档、系统 D…

移动安全总结 2019

声明 本文是学习移动安全总结 2019. 下载地址 http://github5.com/view/1223而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 序言 随着2019年的逝去&#xff0c;二十一世纪第二个十年也已随之结束。回顾过去的十年&#xff0c;我们的生活随着科技的进…

养老院人员定位方案125K芯片AS3933/SI3933/GC3933/PAN3501

随着社会老龄化&#xff0c;高龄化&#xff0c;空巢化和病残化的迅速发展&#xff0c;将使得越来越多的老人住进养老院。虽养老院数量越来越多&#xff0c;但养老院人也越来越多&#xff0c;给现有的养老管理上带来压力&#xff0c;由于服务人员有限&#xff0c;无法及时顾及到…

【LeetCode每日一题】——89.格雷编码

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 数学 二【题目难度】 中等 三【题目编号】 89.格雷编码 四【题目描述】 n 位格雷码序列 是一…

举个栗子!Tableau 技巧(249):为文本表中的不同度量设置不同颜色

使用文本表呈现数据时&#xff0c;通常会用颜色的深浅来代表度量的数值大小。单一度量很容易实现&#xff0c;但多个度量的情况&#xff0c;很多数据粉反馈不知道如何实现。 如下示例&#xff0c;在为不同度量设置了不同颜色后&#xff0c;的确既美观又直观。 具体该如何实现呢…

进制转换 2进制转10进制 10进制转2进制

觉得有用的&#xff0c;HXD们请点个赞●▽● 10进制转2进制&#xff08;以十进制100转换为二进制为例子&#xff1a;&#xff09; 方法一&#xff08;除2取余数&#xff0c;倒叙摆列&#xff0c;高位补零 &#xff09; 100/250余0&#xff1b; 50/225余0&#xff1b; 25/21…

Allegro174版本新功能介绍之改变菜单字体大小

Allegro174版本新功能介绍之改变菜单字体大小 Allegro在升级到174的时候,默认的字体是非常小的,如下图 看起来十分费劲 启动界面 菜单界面 但是174是支持把把这些字体调大的,具体操作如下 选择Setup

git远程仓库使用流程

git远程仓库使用流程远程仓库使用流程远程仓库介绍远程仓库使用流程如何将本地文件夹关联远程仓库多人开发配置流程远程仓库SSH配置远程仓库使用流程总结git分支使用流程分支介绍1.2-分支使用流程远程仓库使用流程 Git命名作用详细描述git clone克隆远程仓库代码把服务器的项目…

Laravel 开发 API 时的前置准备

前言 使用 Laravel 有一段时间了&#xff0c;今天来总结我平时进行开发前的一些准备工作&#xff0c;如果有不合理的地方或者有更好的建议欢迎各位大佬指出纠正&#xff01; 环境 PHP8 MySQL5.7 Nginx1.20 IDE&#xff1a;PhpStorm搭建 安装 推荐使用 composer 安装 或者…

舆情监测技术方案,网络舆情分析技术手段有哪些?

网络舆情分析技术手段着力于利用技术实现对海量的网络舆情信息进行深度挖掘与分析&#xff0c;以快速汇总成舆情信息&#xff0c;从而代替人工阅读和分析网络舆情信息的繁复工作&#xff0c;接下来TOOM舆情监测小编带您简单了解舆情监测技术方案&#xff0c;网络舆情分析技术手…

网站服务器运行过程中有哪些常见问题?

网站服务器运行过程中有哪些常见问题?在线业务运转过程中&#xff0c;网站服务器的宕机或无法访问往往会给访客带来极差的用户体验&#xff0c;继而影响到在线业务的品牌声誉及长远发展。下面聊聊关于网站服务器的常见问题&#xff0c;需多加留意。 1.页面加载速度变慢 这是用…

Leetcode:222. 完全二叉树的节点个数(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 直接当普通二叉树遍历&#xff1a; 利用完全二叉树和满二叉树的特性&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的…

js实现纯前端压缩图片

演示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>压缩图片</title> </head> <bo…

php学习笔记-phpday1

php代码基本语法 PHP&#xff08;PHP: Hypertext Preprocessor&#xff09;即“超文本预处理器”&#xff0c;是在服务器端执行的脚本语言&#xff0c;尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言&#xff0c;吸纳Java和Perl多个语言的特色发展出自己的特色语法&…

【自学C++】C++ HelloWorld

C HelloWorld C HelloWorld教程 我们打开 Dev-C 软件&#xff0c;界面如下&#xff1a; 我们选择文件 -> 新建 -> 源代码&#xff0c;如下图所示&#xff1a; 点击源代码之后&#xff0c;此时界面如下图所示&#xff1a; 我们在新建的文件中&#xff0c;输入以下内容&a…

用远见超越未见 | 立足2022,洞见未来之2023十大安全技术趋势

2022年是极不平凡的一年&#xff0c;外部的世界局势逐步恶化&#xff0c;内部的新冠疫情转段迈向新阶段。2022年也是伟大的一年&#xff0c;党的二十大胜利召开。党的二十大报告就“推进国家安全体系和能力现代化&#xff0c;坚决维护国家安全和社会稳定”作出专章部署&#xf…

三万字机器学习项目整理(基础到进阶)

如果你是学生、计算机领域的工作者&#xff0c;我强烈建议你学习、掌握机器学习&#xff0c;我不敢说它是最简单的&#xff08;机器学习的确很简单&#xff09;&#xff0c;但是掌握机器学习一定是性价比最高的。 本文用浅显易懂的语言精准概括了机器学习的相关知识&#xff0…

jQuery(JS库) | 一文带你掌握jQuery的使用

目录 一&#xff1a;开篇基础 1. 为什么使用 jQuery 2. DOM 对象 3. JS对象和 jQuery 对象 4. 获取 jQuery 5. 牛刀小试 6. DOM 对象和 jQuery 对象 二&#xff1a;选择器 1. 基本选择器 2. 表单选择器 三&#xff1a;过滤器 1. 基本过滤器 2. 表单对象属性过滤器…