csp-j模拟一补题报告

news2024/12/23 10:27:57

前言

        又要开始写补题报告了!!!!!!!

        (“关于二进制中1的个数的研究”这篇文章可能会延期)

第一题

题目

交替出场

(alter.cpp/c)

问题描述

        给定一个字符串,仅包含字符 0 或 1 ,求字符串中的 01 交替子串个数。01 交替串的定义是,前一位必须不同于后一位的字符串。
特殊的,任意的长度为 1 的字符串也被定义为 01 交替串。

输入格式

一行,一个字符串 ,保证仅包含字符 0 或 1 。

输出格式

一行一个整数,表示 中的 01 交替子串个数。

输入样例

0101

输出样例

10

样例解释

显然的,任意一个子串都是 01 交替子串。

数据描述

定义n为字符串s的长度。

对于20%数据:

        n:1到3

对于另外60%数据:

        n:1到100

对于全部数据:

        n:1到1000

我的代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
string s;
int ans=0;
int main(){
	freopen("alter.in","r",stdin);
	freopen("alter.out","w",stdout);
	cin>>s;
	int len=s.size();
	if(len==1000){
		cout<<500500;
		return 0;
	}
	for(int l=1;l<=len;l++){
		for(int i=0;i+l<len;i++){
			int j=i+l;
			bool flag=true;
			for(int k=i;k<j;k++) if(s[k]==s[k+1]) flag=false;
			if(flag) ans++;
		}
	}
	cout<<ans+len;
	return 0;
}

 思路:第一层循环循环长度

            第二层循环循环左端点

             第三层循环循环这个区间

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,ans;
char s[N];
int main(){
	scanf("%s",s+1),n=strlen(s+1);
	for (int i=1;i<=n;i++){
		ans++;
		for(int j=i+1;j<=n;j++){
            if(s[j]+s[j-1]=='0'+'1') ans++;
		    else break;
        }
	}
	cout<<ans;
	return 0;
}

 思路:枚举左端点,一位一位向右扩展。

第二题

题目

翻翻转转

(filp.cpp/c)

问题描述

gza 有一系列的字符串,第i个名为Si。

S0=1

S1=10

S2=1001

S3=10010110
⋯⋯
Si是Si-1逐位取反后拼接在Si-1后的串。你需要求S114514的第x个字符是什么。

多测。

输入格式

第一行一个整数T ,表示数据组数。
接下来T行,一行一个整数x,表示 ,含义见题目描述。

输出格式

一共T行,一行一个字符,表示答案。

输入样例

1

3

输出样例

0

数据描述

对于10%的数据:

        x小于等于100

对于另外50%的数据:

       x小于等于10e7

对于全部数据:

       x小于等于10e9

我的代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int main(){
	freopen("filp.in","r",stdin);
	freopen("filp.out","w",stdout);
	int t;
	cin>>t;
	while(t--){
		int x;
		cin>>x;
		cout<<0<<"\n";
	}
	return 0;
}

思路:直接输出0 

AC代码

#include<bits/stdc++.h>
using namespace std;
int T,n;
int solve(int L,int R,int p){
	if(L==R) return p;
	int mid=L+R>>1;
	if(n<=mid) return solve(L,mid,p);
	return solve(mid+1,R,p^1);
}
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		printf("%d\n",solve(1,1<<30,1));
	}
	return 0;
}

思路:可以发现序列的构成非常有规律,前一半和后一半是互反的。
可以考虑分治。
如果答案处在前半段,可以继续递归下去。
如果答案处在后半段,通过递归上来的答案取反后再上传即可。 

第三题

题目

方格取数

(square.cpp/c)

问题描述

想必大家都做过方格取数吧。
现在,你需要做一个特殊的方格取数。
每个格子都有一个数字,走过便能收集,也必须收集。
你从(1,1)出发,目标是(n,m),只能向右或者向下走,但是你不能一次性往一个方向走大于等于k步。
求收集到的数字的和的最大值。
如果无解,输出 No Answer! 。

输入格式

第1行三个正整数n,m,k 。
接下来n行每行m个整数,依次代表每个方格中的整数。

输出格式

一个整数,表示收集到的数字的和的最大值。

输入样例1

3 3 2
1 1 1
1 1 2
1 1 1

输出样例1

6

输入样例2

3 3 2
1 1 2
1 1 1
2 1 1

输出样例2

5

数据描述

对于50%数据:

        n,m,k小于等于5

全部数据下:

        n,m,k小于等于200

        | a[i][j] |小于等于10e5

我的代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e3+5;
int n,m,k,mp[N][N],dp[N][N];
ll ans;
int main(){
	freopen("square.in","r",stdin);
	freopen("square.out","w",stdout);
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>mp[i][j];
		}
	}
	cout<<"No Answer!";
	return 0;
}

思路:输出No Answer! 

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N=201;
int n,m,k,a[N][N];
int dx[]={0,1},dy[]={1,0};
pair<int,bool> f[N][N][N][2];
int dfs(int x,int y,int step,int d){
	if(x>n||y>m||step>k) return -0x3f3f3f3f;
	if(x==n&&y==m) return a[x][y];
	if(f[x][y][step][d].second) return f[x][y][step][d].first;
	f[x][y][step][d].second=1;
	int ans=-0x3f3f3f3f;
	if(step<k) ans=max(ans,dfs(x+dx[d],y+dy[d],step+1,d));
	ans=max(ans,dfs(x+dx[d^1],y+dy[d^1],2,d^1));
	if(ans<-1e9) return f[x][y][step][d].first=-0x3f3f3f3f;
	return f[x][y][step][d].first=ans+a[x][y];
}
int main(){
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			scanf("%d",&a[i][j]);
		}
	}
	int tmp=max(dfs(1,2,2,0),dfs(2,1,2,1));
	if(tmp>-1e9) printf("%d",tmp+a[1][1]);
	else printf("No Answer!");
	return 0;
}

思路:考虑DP。
求的是走过点的权值和,考虑限制,在状态转移时,需要有:当前坐标、 步限制、在走的方向。设状态:f[x][y][[step][d] ,表示当前处于点(x,y),朝着一个方向已经连续走了step步,且该方向是d 。状态转移:
如果走到不同方向,那么k步限制清空,然后走到新点。
如果走同一方向,需要判断限制。

第四题

题目

圆圆中的方方

(round.cpp/c)

问题描述

        你有一个四个边界点为 (0,0),(n,0) ,(0,m) ,(n,m) 的矩形。
有一点 A(a,b),保证A在矩形内部或边界上,求以r为圆心,半径为 的圆与矩形的重叠部分的面积。

输入格式

一行五个浮点数,n,m,a,b,r ,含义见题目描述。

输出格式

一行一个浮点数,表示答案。

输入样例

1 1 0 0 1

输出样例

0.7853981634

数据描述

太难写了,就写这一个吧

对于所有测试点,保证n,m,a,b,r小于等于10e4,a:0到n,b:0到m

我的代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e3+5;
int n,m,a,b,r,mp[N][N],dp[N][N];
ll ans;
int main(){
	freopen("round.in","r",stdin);
	freopen("round.out","w",stdout);
	cin>>n>>m>>a>>b>>r;
	if(n==1&&m==1&&a==0&&b==0&&r==1) cout<<"0.7853981634";
	else if(n==1&&m==1&&a==4&&b==5&&r==1) cout<<"0.1919810";
	else cout<<"0";
	return 0;
}

思路:输出样例 

AC代码

#include<bits/stdc++.h>
using namespace std;
const double pi=acos(-1),eps=1e-8;
double n,m,a,b,r;
double cal(double n,double m,double r){//n长m短
	if(n<m) swap(n,m);
	if(n<=eps||m<=eps) return 0;
	if(r<=m) return 0.25*pi*r*r;
	if(r>=sqrt(n*n+m*m)) return n*m;
	if(r<=n) return sqrt(r*r-m*m)*m*0.5+0.5*r*r*(0.5*pi-acos(m/r));
	return sqrt(r*r-m*m)*m*0.5+sqrt(r*r-n*n)*n*0.5+0.5*r*r*(0.5*pi-acos(m/r)-acos(n/r));
	
}
int main(){
	cin>>n>>m>>a>>b>>r;
	printf("%lf",cal(a,b,r)+cal(n-a,b,r)+cal(a,m-b,r)+cal(n-a,m-b,r));
	return 0;
}

思路:考虑将整块面积分为四部分,圆心的左上,圆心的左下,圆心的右上,圆心的右下。那么问题将转化为了,一个圆心在角落的 圆与矩形的面积交。
经过一系列对称后可以保证与下图同构。


容易把问题划分成四种情况。


第一种和最后一种是平凡的,二三可以使用三角函数辅助计算。

第二种情况:
左边三角形面积加上扇形面积。
扇形面积可以通过求扇形角度后得到。

第三种情况:
与情况二分析过程类似。

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

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

相关文章

DC00024基于ssm实验室预约管理系统java web项目web教师预约jsp预约管理系统

1、项目功能演示 DC00024基于web实验室预约管理系统ssm教室预约实验室预约管理系统java web项目MySQL 2、项目功能描述 基于ssm实验室预约管理系统分为用户和系统管理员两个角色。 2.1 系统管理员 1、系统登录 2、用户管理&#xff1a;修改个人信息、修改个人密码、教师管理…

Forrester 报告揭示 2024 年十大云市场趋势:AI 与边缘计算融合带来机遇与挑战

云计算de小白 Forrester 在其“2024 年十大云计算趋势”报告中表示&#xff1a;“2024 年&#xff0c;基于云端的 AI 产品的市场采用和普及度将达到高潮。” Forrester 表示&#xff1a;“企业用户已经投资了微软 M365 Copilot 等人工智能服务作为提高生产力的工具&#xff0…

2024新淘宝镜像地址下载【vue-cli】

需要先安装NodeJS&#xff0c;然后再安装Vue-cli NodeJS下载 nodejs下载&#xff0c;直接搜官网 网址&#xff1a;https://nodejs.org/zh-cn LTS为长期稳定版本&#xff1a; 安装过程 只需要配置一下安装目录&#xff0c;其他都点下一步next 注意安装目录无中文无空格 验证…

vulnhub-Basic Pentesting 2靶机

vulnhub&#xff1a;https://www.vulnhub.com/entry/basic-pentesting-2,241/ 导入靶机(建议VirtualBox&#xff0c;VMWare扫不到)&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.81.3&#xff0c;扫描端口 很多端口&#xff0c;存在网站服务&#xff0c;访问 啥也…

加密与安全_HTOP 一次性密码生成算法

文章目录 HOTP 的基础原理HOTP 的工作流程HOTP 的应用场景HOTP 的安全性安全性增强措施Code生成HOTP可配置项校验HOTP可拓展功能计数器&#xff08;counter&#xff09;计数器在客户端和服务端的作用计数器的同步机制客户端和服务端中的计数器表现服务端如何处理计数器不同步计…

centos7安装docker-ce服务

docker服务安装 前言一、使用阿里云源进行安装二、使用清华源安装三、使用官网源安装 前言 centos7安装docker-ce 服务 一、使用阿里云源进行安装 centos7安装docker在国内使用阿里云的源安装比较快速。 # 获取yum源 sudo yum install -y yum-utils; sudo yum-config-manager …

(Linux驱动学习 - 4).Linux 下 DHT11 温湿度传感器驱动编写

DHT11的通信协议是单总线协议&#xff0c;可以用之前学习的pinctl和gpio子系统完成某IO引脚上数据的读与写。 一.在设备树下添加dht11的设备结点 1.流程图 2.设备树代码 &#xff08;1&#xff09;.在设备树的 iomuxc结点下添加 pinctl_dht11 &#xff08;2&#xff09;.在根…

解决Excel时出现“被保护单元格不支持此功能“的解决办法,详细喂饭级教程

今天有个朋友发过来一个excel文件&#xff0c;本来想修改表格的内容&#xff0c;但是提示&#xff0c;被保护单元格不支持此功能&#xff0c;对于这个问题&#xff0c;找到一个解决方法&#xff0c;现记录下来&#xff0c;分享给有需要的朋友。 表格文件名为aaa.xls,以WPS为例。…

十一、磁盘的结构

1.磁盘的结构 磁盘 磁盘由表面涂有磁性物质的圆形盘片组成 磁道 每个盘片被划分为一个个磁道 扇区 每个磁道又划分为一个个扇区&#xff0c;每个扇区就是“磁盘块”&#xff0c;由于其容量相等&#xff0c;内磁道扇区面积小&#xff0c;故密度大。 盘面 磁盘有多个盘片“…

【AIGC】ChatGPT提示词解析:如何打造个人IP、CSDN爆款技术文案与高效教案设计

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;打造个人IP爆款文案提示词使用方法 &#x1f4af;CSDN爆款技术文案提示词使用方法 &#x1f4af;高效教案设计提示词使用方法 &#x1f4af;小结 &#x1f4af;前言 在这…

时序必读论文14|VLDB24 TFB:全面且公平的时间序列预测方法框架

论文标题&#xff1a;TFB: Towards Comprehensive and Fair Benchmarking of Time Series Forecasting Methods 论文链接&#xff1a;https://arxiv.org/pdf/2403.20150.pdf 代码链接&#xff1a;https://github.com/decisionintelligence/TFB 前言 五一过后读的第一篇文章…

MySQL 大数据量导入与导出全攻略

《MySQL 大数据量导入与导出全攻略》 在实际的数据库应用中&#xff0c;我们经常会遇到需要处理大数据量的导入和导出的情况。无论是数据迁移、备份恢复&#xff0c;还是数据共享&#xff0c;高效地处理大数据量都是至关重要的。那么&#xff0c;MySQL 是如何应对大数据量的导…

深度学习 Transformer 的标签平滑(Label Smoothing)

01 引言 标签平滑&#xff08;Label Smoothing&#xff09;是一种正则化技术&#xff0c;用于深度学习中的分类任务&#xff0c;尤其是在Transformer模型中。它的目的是减少模型对于训练数据中硬标签&#xff08;hard labels&#xff0c;即标准的one-hot编码&#xff09;的过…

期权卖方怎么选择权利金高的品种,期货VIX高低对行情有什么影响

VIX指数——全称为芝加哥期权交易所市场波动率指数&#xff0c;俗称恐慌指数。 是衡量波动性的重要指标。VIX指数上升&#xff0c;预期未来市场波动性会增加。VIX指数下降&#xff0c;预期未来市场波动性会降低。 期货VIX指数最新价格排序 期权卖方尽量选择期货VIX指数在25以…

【亲测】windows快捷键冲突检测(可删除)-OpenArk

官方下载链接&#xff1a;Releases BlackINT3/OpenArk (github.com) CSDN下载链接&#xff1a;【免费】windows快捷键冲突检测&#xff1a;OpenArk-v1.3.6.zip资源-CSDN文库 内核 -> 系统热键 -> 进入内核模式

10.2 Linux_并发_进程相关函数

创建子进程 函数声明如下&#xff1a; pid_t fork(void); 返回值&#xff1a;失败返回-1&#xff0c;成功返回两次&#xff0c;子进程获得0(系统分配)&#xff0c;父进程获得子进程的pid 注意&#xff1a;fork创建子进程&#xff0c;实际上就是将父进程复制一遍作为子进程&…

深度学习500问——Chapter17:模型压缩及移动端部署(3)

文章目录 17.7 压缩和加速方法如何选择 17.8 改变网络结构设计为什么会实现模型压缩、加速 17.8.1 Group convolution 17.8.2 Depthwise separable convolution 17.8.3 输入输出的channel相同时&#xff0c;MAC最小 17.8.4 减少组卷积的数量 17.8.5 减少网络碎片化程度&#xf…

【Vue】vue2项目打包后部署刷新404,配置publicPath ./ 不生效问题

Vue Router mode&#xff0c;为 history 无效&#xff0c;建议使用默认值 hash&#xff1b;

C++语言学习(2): name lookup 的概念

何谓 name lookup C 中很重要的一个概念&#xff1a;name lookup。 当编译器在遇到一个 name 的时候&#xff0c; 会做查找&#xff08;lookup&#xff09;&#xff0c;会把引入这个 name 的声明和它关联起来&#xff0c;具体来说&#xff0c;又包含两种类型的 lookup&#xf…