2024 China Collegiate Programming Contest (CCPC) Zhengzhou Onsite 基础题题解

news2025/1/11 11:52:50

今天先发布基础题的题解,明天再发布铜牌题和银牌题的题解

L. Z-order Curve

 思路:这题目说了,上面那一行,只有在偶数位才有可能存在1,那么一定存在这样的数,0 ,1,100, 10000,那么反之,我们的数列是行的二倍,因此会出现10,1000,100000这样的数,因此,就可以发现,其实组成的数也是由二进制数递推的,因此我们可以从高位到低位逐步去找,如果相同且为1就变成0,如果不同就直接结束,输出L即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int l,r;
void solve()
{
	cin>>l>>r;
	for(int i=61;i>=0;i--)
	{
		int bitl=(l>>i)&1;
		int bitr=(r>>i)&1;
		if(bitl==bitr&&bitl==1)
		{
			l-=(1LL<<i);
			r-=(1LL<<i);
		}
		else if(bitl!=bitr)
		{
			cout<<l<<"\n";
			return ;
		}
	}
}
signed main()
{
	cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}

F. Infinite Loop

 思路:这题有一个比较恶心的地方,就是说从1小时开始,实际上是从0小时开始计算,然后我们去计算公差是多少,我们现将所有的bi加在一起为sum,然后取sum和k的较大值作为公差,然后去对题目进行分析,我们会发现,从第二天开始,就去进行等差数列了,因此我们只需要计算出来第一天和第二天在什么时候完成即可,还有一个特判就是要对小时特判,如果小时是0,那么天数-1,小时+k

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,q;
int a[200005];
int b[200005];
int ans1[200005];
int ans2[200005];
int d;
int flag,x;
signed main()
{
	cin>>n>>k>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i]>>b[i];
		a[i]-=1;
		d+=b[i];
	}
	d=max(d,k);
	int t=0;
	for(int i=1;i<=n;i++)
	{
		ans1[i]=max(t,a[i])+b[i];
		t=ans1[i];
	}
	for(int i=1;i<=n;i++)
	{
		a[i]+=k;
	}
	for(int i=1;i<=n;i++)
	{
		ans2[i]=max(t,a[i])+b[i];
		t=ans2[i];
	}
	for(int i=1;i<=q;i++)
	{
		cin>>flag>>x;
		if(flag==1)
		{
			int day=ans1[x]/k;
			int hour=ans1[x]%k; 
			if(hour==0)
			{
				day-=1;
				hour+=k;
			}
			cout<<day+1<<" "<<hour<<"\n";
		}
		else
		{
			int time=ans2[x]+(flag-2)*d;
			int day=time/k;
			int hour=time%k; 
			if(hour==0)
			{
				day-=1;
				hour+=k;
			}
			cout<<day+1<<" "<<hour<<"\n";
		}
	}
	return 0;
}

B. Rolling Stones

思路:很板的一个广搜,只需要找到翻转之后,每个面上面是什么就可以了,同时要确保翻转的时候翻转过去的面,等于那个底面上的值

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int a[205][205];
struct node{
	int x,y;
	int qian;
	int zuo;
	int you;
	int di;
	int tmp;
};
deque<node> q;
int vis[205][205];
int ans[205][205];
int fx,fy;
void bfs()
{
	while(!q.empty())
	{
		node test=q.front();
		q.pop_front();
		int x=test.x;
		int y=test.y;
//		cout<<x<<" "<<y<<"\n";
//		cout<<test.qian<<" "<<test.zuo<<" "<<test.you<<" "<<test.di<<"\n";
		if(y%2==0)
		{
			if(vis[x][y-1]==0&&y-1>=1&&y-1<=2*x-1&&a[x][y-1]==test.zuo)//向左移动
			{
				vis[x][y-1]=1;
				q.push_back((node){x,y-1,test.you,test.qian,test.di,test.zuo,test.tmp+1});
				ans[x][y-1]=test.tmp+1;
			} 
			if(vis[x][y+1]==0&&y+1>=1&&y+1<=2*x-1&&a[x][y+1]==test.you)//向右移动
			{
				vis[x][y+1]=1;
				q.push_back((node){x,y+1,test.zuo,test.di,test.qian,test.you,test.tmp+1});
				ans[x][y+1]=test.tmp+1;
			} 
			if(vis[x-1][y-1]==0&&y-1>=1&&y-1<=2*(x-1)-1&&x-1>=1&&x-1<=n&&a[x-1][y-1]==test.qian)//向上移动
			{
				vis[x-1][y-1]=1;
				q.push_back((node){x-1,y-1,test.di,test.zuo,test.you,test.qian,test.tmp+1});
				ans[x-1][y-1]=test.tmp+1;
			}
		}
		else
		{
			if(vis[x][y-1]==0&&y-1>=1&&y-1<=2*x-1&&a[x][y-1]==test.zuo)//向左移动
			{
				vis[x][y-1]=1;
				q.push_back((node){x,y-1,test.you,test.qian,test.di,test.zuo,test.tmp+1});
				ans[x][y-1]=test.tmp+1;
			} 
			if(vis[x][y+1]==0&&y+1>=1&&y+1<=2*x-1&&a[x][y+1]==test.you)//向右移动
			{
				vis[x][y+1]=1;
				q.push_back((node){x,y+1,test.zuo,test.di,test.qian,test.you,test.tmp+1});
				ans[x][y+1]=test.tmp+1;
			} 
			if(vis[x+1][y+1]==0&&y+1>=1&&y+1<=2*(x+1)-1&&x+1>=1&&x+1<=n&&a[x+1][y+1]==test.qian)//向下移动
			{
				vis[x+1][y+1]=1;
				q.push_back((node){x+1,y+1,test.di,test.zuo,test.you,test.qian,test.tmp+1});
				ans[x+1][y+1]=test.tmp+1;
			}
		}
	}
}
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=2*i-1;j++)
		{
			cin>>a[i][j];
		}
	}
	cin>>fx>>fy;
	if(fx==1&&fy==1)
	{
		cout<<0<<"\n";
		return 0;
	}
	q.push_back((node){1,1,2,1,3,4,0});
	vis[1][1]=1;
	bfs();
	if(ans[fx][fy]==0)
	{
		cout<<"-1\n";
	}
	else
	{
		cout<<ans[fx][fy]<<"\n";
	}
	return 0;
}

 M. Rejection Sampling

 思路:这题一开始看起来其实是有点儿乱的,不知道在说什么,而且也不知道到底要操作什么,但是仔细阅读后会发现,那个S的概率就是C(n,k)*pi^k+(1-pi)^(n-k),若想要满足题目中的S与ai乘正比的话,我们需要满足pi/(1-pi)与ai成正比,我们可以将比例系数C设为c,因此我们可以得到式子

pi/(1-pi)=c*ai;

可以得到pi=c*ai/(1+c*ai),可知,pi关于c单调递增

c=pi/((1-pi)*ai),我们可以去二分c然后去判断pi的和是否是k

然后就解决了

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, k;
long double a[100005];  
bool check(long double c) 
{
    long double ans=0;
    long double x;
    for(int i=1;i<=n;i++) 
	{
        x =(c*a[i])/(1.00+c*a[i]);
        ans+=x;
    }
    return ans<=k;
}
signed main() 
{
    cin>>n>>k;
    for (int i=1;i<=n;i++) 
	{
        cin>>a[i];
    }
    long double l=0.0;
    long double r=1e15;
    for (int i=1;i<=200;i++) 
	{
        long double mid=(l+r)/2;
        if (check(mid)) 
		{
            l=mid;
        } 
		else 
		{
            r=mid;
        }
    }
    cout<<fixed<<setprecision(10);
    for (int i = 1;i<=n;i++) 
	{
        cout<<(long double)(l*a[i])/(1.00+l*a[i])<<"\n";
    }
    return 0;
}

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

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

相关文章

【FlutterDart】tolyui_feedback组件例子效果(23 /100)

上效果图 有12种位置展示效果&#xff1b;很能满足大部分需要 代码如下&#xff1a; import package:flutter/material.dart; import package:tolyui_feedback/tolyui_feedback.dart;class TolyTooltipDemo extends StatelessWidget {const TolyTooltipDemo({super.key});ove…

服务器攻击方式有哪几种?

随着互联网的快速发展&#xff0c;网络攻击事件频发&#xff0c;已泛滥成互联网行业的重病&#xff0c;受到了各个行业的关注与重视&#xff0c;因为它对网络安全乃至国家安全都形成了严重的威胁。面对复杂多样的网络攻击&#xff0c;想要有效防御就必须了解网络攻击的相关内容…

Mermaid 使用教程之流程图 - 从入门到精通

本文由 Mermaid中文文档 整理而来&#xff0c;并且它同时提供了一个Mermaid在线编辑器。 Mermaid 流程图 - 基本语法​ 流程图由节点&#xff08;几何形状&#xff09;和边&#xff08;箭头或线&#xff09;组成。Mermaid代码定义了如何创建节点和边&#xff0c;并适应不同的…

Flink系统知识讲解之:如何识别反压的源头

Flink系统知识之&#xff1a;如何识别反压的源头 什么是反压 Ufuk Celebi 在一篇古老但仍然准确的文章中对此做了很好的解释。如果您不熟悉这个概念&#xff0c;强烈推荐您阅读这篇文章。如果想更深入、更低层次地了解该主题以及 Flink 网络协议栈的工作原理&#xff0c;这里有…

网络-ping包分析

-a&#xff1a;使 ping 在收到响应时发出声音&#xff08;适用于某些操作系统&#xff09;。-b&#xff1a;允许向广播地址发送 ping。-c count&#xff1a;指定发送的 ping 请求的数量。例如&#xff0c;ping -c 5 google.com 只发送 5 个请求。-i interval&#xff1a;指定两…

国产linux系统(银河麒麟,统信uos)使用 PageOffice 实现后台生成单个PDF文档

PageOffice 国产版 &#xff1a;支持信创系统&#xff0c;支持银河麒麟V10和统信UOS&#xff0c;支持X86&#xff08;intel、兆芯、海光等&#xff09;、ARM&#xff08;飞腾、鲲鹏、麒麟等&#xff09;、龙芯&#xff08;LoogArch&#xff09;芯片架构。 PageOffice 版本&…

Win10微调大语言模型ChatGLM2-6B

在《Win10本地部署大语言模型ChatGLM2-6B-CSDN博客》基础上进行&#xff0c;官方文档在这里&#xff0c;参考了这篇文章 首先确保ChatGLM2-6B下的有ptuning AdvertiseGen下载地址1&#xff0c;地址2&#xff0c;文件中数据留几行 模型文件下载地址 &#xff08;注意&#xff1…

Windows11环境下设置MySQL8字符集utf8mb4_unicode_ci

1.关闭MySQL8的服务CTRLshiftESC&#xff0c;找到MySQL关闭服务即可 2.找到配置文件路径&#xff08;msi版本默认&#xff09; C:\ProgramData\MySQL\MySQL Server 8.0 3.使用管理员权限编辑my.ini文件并保存 # Other default tuning values # MySQL Server Instance Config…

js代理模式

允许在不改变原始对象的情况下&#xff0c;通过代理对象来访问原始对象。代理对象可以在访问原始对象之前或之后&#xff0c;添加一些额外的逻辑或功能。 科学上网过程 一般情况下,在访问国外的网站,会显示无法访问 因为在dns解析过程,这些ip被禁止解析,所以显示无法访问 引…

vue3 + ts + element-plus(el-upload + vuedraggable实现上传OSS并排序)

这里创建项目就不多说了 安装element-plus npm install element-plus 安装vuedraggable npm install vuedraggable 安装ali-oss npm install ali-oss 这里是封装一下&#xff1a;在components创建文件夹jc-upload>jc-upload.vue 在封装的过程中遇到了一个问题就是dr…

理解Unity脚本编译过程:程序集

https://docs.unity3d.com/Manual/script-compilation.html 关于Unity C#脚本编译的细节&#xff0c;其中一个比较重要的知识点就是如何自定义Assembly。 预定义的assembly 默认情况下&#xff0c;Unity会按照这个规则进行编译。 PhaseAssembly nameScript files1Assembly-…

设计模式 行为型 责任链模式(Chain of Responsibility Pattern)与 常见技术框架应用 解析

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许将请求沿着处理者链进行发送。每个处理者对象都有机会处理该请求&#xff0c;直到某个处理者决定处理该请求为止。这种模式的主要目的是避免请求的发送者和接收者之间…

VS2022如何修改我们新建工程打开新建文件中,默认输入我们的main函数和宏定义

1.右击我们的VS环境&#xff0c;选择【打开文件位置】 2. 进入C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE 目录 进入【VC】文件夹 进入【VCProjectItems】文件夹 3. 修改newcfile.cpp文件 右击选择【打开方式】选择【记事本】 添加如下内容 #defi…

2025-1-10-sklearn学习(36、37) 数据集转换-无监督降维+随机投影 沙上并禽池上暝。云破月来花弄影。

文章目录 sklearn学习(36、37) 数据集转换-无监督降维随机投影sklearn学习(36) 数据集转换-无监督降维36.1 PCA: 主成份分析36.2 随机投影36.3 特征聚集 sklearn学习(37) 数据集转换-随机投影37.1 Johnson-Lindenstrauss 辅助定理37.2 高斯随机投影37.3 稀疏随机矩阵 sklearn学…

openssl编译

关于windows下&#xff0c;openssl编译 环境准备 安装 perl:https://djvniu.jb51.net/200906/tools/ActivePerl5_64.rar安装nasm&#xff1a;https://www.nasm.us/pub/nasm/releasebuilds/2.13.01/win64/nasm-2.13.01-installer-x64.exe下载opensll源码&#xff1a;https://o…

2025-1-9 QT 使用 QXlsx库 读取 .xlsx 文件 —— 导入 QXlsx库以及读取 .xlsx 的源码 实践出真知,你我共勉

文章目录 1. 导入QXlsx库2. 使用 QXlsx库 读取 .xlsx 文件小结 网上有很多教程&#xff0c;但太费劲了&#xff0c;这里有个非常简便的好方法&#xff0c;分享给大家。 1. 导入QXlsx库 转载链接 &#xff1a;https://github.com/QtExcel/QXlsx/blob/master/HowToSetProject.md…

先辑芯片HPM5300系列之SEI多摩川协议命令表问题研究

多摩川协议有9条命令&#xff0c;但是先辑SEI的命令表只有8张。0-6是可用的&#xff0c;第7张是黑洞表&#xff0c;所以只有7张可用。 命令表的限制颇多&#xff0c;比如命令表只能按顺序使用 &#xff1a;例如0、1、3&#xff0c;那么命令表3是不能用的。 如果想要实现9个命令…

kotlin项目无法访问Java类的问题

使用IntelliJ创建一个Kotlin项目&#xff0c;然后在src/main/kotlin中创建一个java接口&#xff1a;Animal.java&#xff0c;然后在Main.kt中打印这个java接口&#xff0c;如下&#xff1a; fun main() {println(Animal::class.java) }代码在编辑器中并没有报错&#xff0c;但…

全栈面试(一)Basic/微服务

文章目录 项目地址一、Basic InterviewQuestions1. tell me about yourself?2. tell me about a time when you had to solve a complex code problem?3. tell me a situation that you persuade someone at work?4. tell me a about a confict with a teammate and how you…

医疗可视化大屏 UI 设计新风向

智能化交互 借助人工智能与机器学习技术&#xff0c;实现更智能的交互功能。如通过语音指令或手势控制来操作大屏&#xff0c;医护人员无需手动输入&#xff0c;可更便捷地获取和处理信息。同时&#xff0c;系统能根据用户的操作习惯和数据分析&#xff0c;自动推荐相关的医疗…