Codeforces Round 883 (Div. 3) A~G

news2024/9/24 19:22:15

比赛链接:Dashboard - Codeforces Round 883 (Div. 3) - Codeforces

目录

A. Rudolph and Cut the Rope

B. Rudolph and Tic-Tac-Toe

C. Rudolf and the Another Competition

D. Rudolph and Christmas Tree

E. Rudolf and Snowflakes 

F. Rudolph and Mimic

G. Rudolf and CodeVid-23


A. Rudolph and Cut the Rope

题意:给你n个绳子高度和绳子长度,问你至少需要割掉几根绳子才能得到糖果。

思路:若绳子高度比长度长则糖果会被吊着到不了地面,所以比较绳子长度和高度大小即可。

代码:

void solve() {
	int n,x,y,ans=0;
	cin>>n;
	FOR(1,n) {
		cin>>x>>y;
		ans+=(x>y);
	}
	cout<<ans<<endl;
}

B. Rudolph and Tic-Tac-Toe

题意:给你一个已经3*3的已经布置好的棋盘,横着连一块竖着连一块或者斜着连一块那个人就赢了,问你谁会赢。

思路:按照题意模拟即可。

代码:

void add(char c) {
	if(c=='X')x++;
	else if(c=='O')y++;
	else if(c=='+')z++;
}
void solve() {
	x=y=z=0;
	for(int i=1; i<=3; i++)
		for(int j=1; j<=3; j++)
			cin>>a[i][j];
	for(int i=1,j=1; i<=3; i++) {
		if(a[i][j]==a[i][j+1]&&a[i][j+1]==a[i][j+2]) add(a[i][j]);
		if(a[j][i]==a[j+1][i]&&a[j+1][i]==a[j+2][i]) add(a[j][i]);
	}
	if(a[1][1]==a[2][2]&&a[3][3]==a[1][1]) add(a[1][1]);
	if(a[3][1]==a[2][2]&&a[3][1]==a[1][3]) add(a[1][3]);
	if(x)cout<<"X"<<endl;
	else if(y)cout<<"O"<<endl;
	else if(z)cout<<"+"<<endl;
	else cout<<"DRAW"<<endl;
}

C. Rudolf and the Another Competition

题意:给你n个m行的出题时间,比赛在第h分钟罚时结束,每做一个题的罚时会累加到后面,你是第一个人,问你的排名是多少(若有人和你并列,你的排名则在那个人的前面)。

思路:出题快的先写,排序模拟一下即可。记得开long long,该题会爆int(我已经#define int long long 了)。

struct st {
	int num,t,id;
};
bool cmp(st a,st b) {
	if(a.num!=b.num)return a.num>b.num;
	if(a.t!=b.t)return a.t<b.t;
	return a.id<b.id;
}
void solve() {
	vector<st>ans;
	int n,m,h,res=0;
	cin>>n>>m>>h;
	for(int i=1;i<=n;i++) {
		vector<int>v;
		for(int j=1;j<=m;j++) {
			int x;
			cin>>x;
			v.push_back(x);
		}
		int sum=0,t=0,num=0;
		sort(v.begin(),v.end());
		for(auto x:v) {
			if(sum+x>h)break;
			num++,sum+=x,t+=sum;
		}
		ans.push_back({num,t,i});
	}
	sort(ans.begin(),ans.end(),cmp);
	for(auto x:ans) {
		res++;
		if(x.id==1)break;
	}
	cout<<res<<endl;
}

D. Rudolph and Christmas Tree

题意:给你n个等腰三角形的底和高,还有它在坐标轴上的高度,问你最后这几个三角形的总面积是多少(可能会重叠)。

思路:若该三角形是第一个三角形或者它没和上一个三角形重叠,它对答案的贡献就为它自己的面积;若它与上一个三角形重叠了,那么未重叠部分就是梯形,这个三角形对答案的贡献为梯形面积。梯形面积为(上底+下底)*高/2,上底和高都能通过相似的比例求出来,将每个三角形的贡献求出来即可。

void solve() {
	int n;
	double d,h;
	double ans=0;
	cin>>n>>d>>h;
	for(int i=1; i<=n; i++)cin>>a[i];
	sort(a+1,a+n+1,greater<int>());
	for(int i=1; i<=n; i++) {
		if(i==1||a[i]+h<=a[i-1]) {
			ans+=d*h/2;
			continue;
		}
		double k=(a[i-1]-a[i]);//高
		double dd=d*((h-k)/h);//上底
		ans+=(dd+d)*k/2;
	}
	cout<<fixed<<setprecision(8)<<ans<<endl;
}

E. Rudolf and Snowflakes 

题意:给你一个n,问你是否能够找到(1-q^k)/(1-q)(等比数列前n项和)恰好等于n,其中q,k为自定义,q>=2,k>=3。

思路:当q小于1e6时,直接预处理判断即可,而当q大于1e6时时候,若k等于4,则(1-q^4)/(1-q)>1e18,超过了n范围了,所以当q>1e6时k只可能等于3,此时只需要判断q^2+q+1=n,是否存在整数根即可(预处理会爆long long,记得开__int128)

const int maxn = 1e6 + 5;
unordered_map<int,bool>mp;
void solve() {
	int n;
	cin>>n;
	if(mp[n]) {
		yes;
		return;
	}
	int k=4*n-3;
	int q=sqrt(k);
	if(q*q==k&&n!=1&&n!=3)yes;
	else no;
}
signed main() {
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);
	for(int i=2; i<=maxn; i++) {
		__int128 k=i*i*i;
		for(__int128 j=1+i+i*i; j<=1e18; j+=k,k*=i)mp[j]=true;
	}
	int _;
	cin >> _;
	while (_--)
		solve();
	return 0;
}

F. Rudolph and Mimic

题意:

思路:因为模仿者不能连续超过两个阶段保持同一个值, 所以在不超过两步的时候必然会有一个值x的个数会增加,换句话说就是模仿者变成了x,所以模仿者就在这些x之中。接下来我们把值不等于x的值给去除,在不超过两步的时候又必然有个值会变化,所以在剩下来的值中,不同于原先的x的即是模仿者。

代码:

map<int,vector<int>>mp1,mp2;
int n,x,f,ff;
void sol() {
	cout<<"- 0"<<endl;
	for(int i=1; i<=9; i++)mp2[i].clear();//初始化
	for(int i=1; i<=n; i++) cin>>x,mp2[x].push_back(i);//存储输入元素及其下标
	for(int i=1; i<=9; i++) {
		if(mp2[i].size()>mp1[i].size()) {
			f=i;//f记录的是第一次模仿者变成了什么数字
			return;
		}
	}
}
void sol2() {
	for(int i=1; i<=n; i++) {
		cin>>x;
		if(x!=f)ff=i;//模仿者改变了所以和其它元素的值不同,ff记录模仿者下标。
	}
}
void solve() {
	f=0,ff=0;
	cin>>n;
	for(int i=1; i<=9; i++)mp1[i].clear();
	for(int i=1; i<=n; i++)cin>>x,mp1[x].push_back(i);
	while(!f) sol();

	cout<<"- "<<n-(int)mp2[f].size();
	n=mp2[f].size();

	for(int i=1; i<=9; i++)
		if(i!=f)
			for(auto x:mp2[i]) cout<<" "<<x;//把其它元素排除,使得除模仿者之外,剩下元素的值一样	
	cout<<endl;

	sol2();
	while(!ff) cout<<"- 0"<<endl,sol2();
	cout<<"! "<<ff<<endl;
}

G. Rudolf and CodeVid-23

题意: 

 思路:可以注意到n<=10,所以我们可以将二进制的字符串转换为10进制的数字,方便计算它们的贡献。设一开始的状态为a,一个药的药效为b,它的副作用为c,则a用了这个药后会变为(a&~b)|c。~为取反的意思,1变0,0变1。这是因为b中的1会使得a中相同位的1变成0(也就是治病),并且b中的0对于a没有影响,所以要用&且取反;而c中的1会使得a中相同位的0变成1(也就是副作用导致生病),并且c中的0对于a没有影响,所以要用 |。

然后将每个药需要消耗的天数作为边权,(a&~b)|c作为转移公式,跑一遍最短路即可。若dis[0]>=inf则说明跑不到0(没病的情况),输出-1;反之输出dis[0]。

代码:

int get(string s){
	int n=s.size(),sum=0,now=1;
	for(int i=n-1;i>=0;i--){
		sum+=now*(s[i]=='1');
		now*=2;
	}
	return sum;
}
void solve() {
	mem(vis,0);
	mem(dis,inf);
	int n,m,now;
	string s,s1,s2;
	cin>>n>>m>>s;
	now=get(s);
	dis[now]=0;
	for(int i=1;i<=m;i++){
		cin>>d[i]>>s1>>s2;
		a[i]=get(s1),b[i]=get(s2);
	}
	priority_queue<PII,vector<PII>,greater<PII>>q;
	q.push({0,now});
	while(!q.empty()){
		auto k=q.top();
		q.pop();
		if(vis[k.second])continue;
		vis[k.second]=true;
		for(int i=1;i<=m;i++){
			int temp1=(k.second&~a[i])|b[i];
			int temp2=dis[k.second]+d[i];
			if(dis[temp1]>temp2){
				dis[temp1]=temp2;
				q.push({temp2,temp1});
			}
		}
	}
	if(dis[0]>=inf)cout<<-1<<endl;
	else cout<<dis[0]<<endl;

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

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

相关文章

JavaWeb项目(包含SSM项目)部署到Linux云服务器

目录 一、云服务器环境部署 1、安装JDK 查看JDK的命令为&#xff1a; 安装JDK命令&#xff1a; 2、安装Tomcat 2.1 安装步骤 2.2 验证Tomcat是否启动成功 3、安装MySQL 二、部署 Web 项目到 Linux 2.1 在云服务器中数据库建库建表 2.2 修改部署项目连接数据库密码 …

Qt(Day2)

实现登录框中&#xff0c;当登录成功时&#xff0c;关闭登录界面&#xff0c;并跳转到其他界面&#xff1a;

Go实现在线词典翻译(三种翻译接口,结合sync)

火山翻译 首先介绍用火山翻译英译汉。 package mainimport ("bufio""bytes""encoding/json""fmt""io""log""net/http""os""strings""unicode" )type DictRequestHS st…

第四章:角色和菜单管理功能【基于Servlet+JSP的图书管理系统】

角色和菜单功能 一、角色功能 接下来我们可以完成角色管理的增删改查操作 1. Bean对象 创建sys_role对应的实体对象SysRole Data public class SysRole {private Integer id;private String name;private String notes;private Date createTime; }2. Dao层 现在我们就可以在D…

JVM(Java虚拟机)详解

目录 一、JVM内存区域划分 1. 什么是内存区域划分以及为啥要进行区域划分 2. JVM内存区域划分详解 3. 堆区详解&#xff1a; 4. 给一段代码&#xff0c;问某个变量是在那个区域上&#xff1f; 二、JVM类加载机制 1.类加载的过程 2. 类加载的时机 3. 双亲委派模型&#xff08…

下班前几分钟,我彻底玩懂了tmux

目录 1. tmux简介2. Session3. Window4. Pane5. 自定义tmux配置6. 在shell脚本中操纵tmuxReferences 1. tmux简介 tmux&#xff08;terminal multiplexer&#xff09;是一个非常强大的工具&#xff0c;主要有以下几点功能&#xff1a; 终端复用&#xff1a; tmux 使你能够在一…

Linux分布式应用 Zabbix监控配置[添加主机 自定义监控内容 邮件报警 自动发现/注册 代理服务器 高可用集群]

-------------------- 添加 zabbix 客户端主机 -------------------- 关闭防火墙 systemctl disable --now firewalld setenforce 0 hostnamectl set-hostname zbx-agent01 服务端和客户端都配置时间同步 yum install -y ntpdate ntpdate -u ntp.aliyun.com 服务端和客户端都设…

基于simulink跟踪火车站对象检测遗弃物体(附源码)

一、前言 此示例演示如何跟踪火车站的对象并确定哪些对象保持静止。公共场所的遗弃物品会引起当局的关注&#xff0c;因为它们可能会构成安全风险。算法&#xff08;例如本例中使用的算法&#xff09;可用于通过将他们的注意力引导到潜在的感兴趣区域来协助监控实时监控视频的…

二十五、传输层协议(上)

文章目录 一、再谈端口号&#xff08;一&#xff09;端口号定义&#xff08;二&#xff09;端口号范围划分1.一共有 2^16 个端口2.认识知名端口号(Well-Know Port Number)3.端口号和进程就是K-V关系4.netstat&#xff08;1&#xff09;示例1&#xff1a; n 拒绝显示别名&#x…

CentOS Linux上安装JDK11、MySQL8.0、Minio等软件(rpm脚本模式)

本地环境&#xff1a;Windows 10家庭版 16G内存 512G硬盘 软件&#xff1a;VMWare WorkStation 16.0 FinalShell 4.0.1 一、下载必要软件包 下载软件均选择x86架构64位&#xff01;&#xff01;&#xff01;&#xff08;可根据自己的电脑配置选择&#xff09; CentOS Linu…

基础算法-前缀和

1 算法笔记 2.代码示例 3.代码解析 #include<iostream> using namespace std; const int maxn 1010000; int a[maxn],s[maxn];//a数组是用来存放数组的&#xff0c;s是用来存放前n项数组的和 int m,n;int main(){scanf("%d%d",&n,&m);for(int i1;i&l…

【react】插件react-tsparticles和tsparticles实现粒子特效:

文章目录 一、效果图:二、实现思路:三、实现代码:【1】安装依赖【2】 一、效果图: 二、实现思路: particles&#xff08;npm i react-particles-js&#xff09;目前已被弃用&#xff1b;取代它的是tsparticles&#xff08;npm i react-tsparticles 和npm install tsparticles&a…

docker 安装应用

前文介绍&#xff1a;我们再阿里云领取的ECS服务器&#xff0c;服务器选择应用模板&#xff0c;他会自动帮我们的服务器安装docker的一些相关插件。如果没有&#xff0c;则需要自己安装docker docker 安装Jenkins 1.下载Jenkins镜像 推荐版本 jenkins/jenkins:lts 命令&…

python 实现简易的学员管理系统

文章目录 前言基本思路需求实现1.实现菜单的功能2.提示用户输入需要进行的操作&#xff0c;并执行相关操作3.具体函数功能的实现增加学员信息显示所有学员信息删除学员信息修改学员信息查询学员信息 整体代码展示 前言 前面我们已经学习了 python 的输入输出、条件语句、循环、…

面向对象编程主线三

面向对象编程 三、第三阶段 高内聚&#xff1a;类的内部数据操作细节自己完成&#xff0c;不允许外部干涉&#xff1b; 低耦合&#xff1a;仅对外暴露少量的方法用于使用。 封装性的设计思想&#xff1a;把该隐藏的隐藏起来&#xff0c;该暴露的暴露出来。 3.1、面向对象的特…

[物理层]传输方式

传输方式 串行传输与并行传输 穿行传输是指数据是一个比特一个比特依次发送的&#xff0c;在发送端与接收端只用一条数据线路 并行传输是指一次发n个比特&#xff0c;在发送端与接收端需要n条数据线路 在网络中计算机通信通常采用串行传输&#xff1b;而在计算机内部&#x…

Minio在Windows的部署并使用Python来操作桶

什么是Minio? MinIO 是一个开源的对象存储服务器&#xff0c;具有高可用性、高性能和可伸缩性。它兼容 Amazon S3 API&#xff0c;因此可以无缝地替代 Amazon S3 作为对象存储的解决方案。 MinIO 可以让你在自己的基础设施中搭建一个对象存储服务&#xff0c;使你能够存储和…

HTML5+CSS3+JS小实例:背景动态变化的登录界面2.0

实例:背景动态变化的登录界面2.0 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" con…

malloc()与calloc()的辨析

malloc()与calloc()的相同点 两者都是常用的内存分配函数&#xff0c;用于动态分配内存 两者返回值类型都为void*&#xff0c;需要强制转换为所需类型 使用完分配的内存后&#xff0c;都需使用free()函数来释放该内存&#xff0c;防止内存泄漏 malloc()与calloc()的不同点 mal…