CSP-J二轮模拟赛----张浩轩补题报告

news2024/12/29 9:24:36

 1.题目报告

1.交替出场2.翻翻转转3.方格取数4.圆圆中的方方
AC0分--文件读写0分20分--骗分

2.赛中概况

第一题比较顺利,五六分钟就开始敲代码,暴力AC。

 第二题耗了30分钟左右才有思路,写的时候也不大顺利,用得递归。文件读写错了,0分(写对是20分)。递归调用条件也错了,该用那个左移,取反也只需要一个log2的。

第三、四题根本没仔细看,本来骗分能拿50分的,最后只拿了20分。

赛后1,2,3题AC,

3.题目分析:

1.交替出场

题目描述

给定一个字符串,仅包含字符 0 或 1,求字符串中的 01 交替子串个数。

01 交替串的定义是,前一位必须不同于后一位的字符串。

特殊的,任意的长度为 1 的字符串也被定义为 01 交替串。

输入描述

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

输出描述

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

输入样例

0101

输出样例

10

样例解释

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

数据范围

定义 nn 为字符串 ss 的长度。
对于 20%20% 数据:1≤n≤3。

对于另外 60%60% 数据:1≤n≤100。

对于全部数据:1≤n≤1000。

比赛情况:AC

分析:

这道题直接暴力就能过,主要分两种:1.按字符串长度分类判断,时间复杂度O(n^3),较高;

2.按起点终点分类,(确定起点找终点)时间复杂度O(n^2)

代码:
#include<bits/stdc++.h>
using namespace std;
const int N=100500;
int main(){
	//freopen("alter.in","r",stdin);
	//freopen("alter.out","w",stdout);
	string a;
	cin>>a;
	int len=a.size(),sum=0;
	for(int i=0;i<len;i++){
		for(int j=i;j<len;j++){
			if(j-i==0)sum++;
			else{
				if(a[j-1]!=a[j]){
					sum++;
				}else{
					break;
				}
			}
		}
	}cout<<sum;
	return 0;
}

2. 翻翻转转

题目描述

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

s0=1

s1=10

s2=1001

s3=10010110

⋯⋯

si 是 si−1​​ 逐位取反后拼接在 si−1​​ 后的串。

你需要求 s114514 的第 x 个字符是什么。

多测。

输入描述

第一行一个整数 TT,表示数据组数。

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

输出描述

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

输入样例

1

3

输出样例

0

数据范围

对于 10% 的数据:x≤100。

对于另外 50% 的数据:x≤10^7。

对于全部数据:x≤10^9。

分析:

这道题用递归求解,从样例中找规律可知 :

s[2]=~s[1]

s[3]=~s[1]  s[4]=~s[2]

s[5]=~s[1] s[6]=~s[2]   s[7]=~s[3] s[8]=~s[4]

......

推算得出:

s[2^n+t]=~s[2^(n-1)+t]

也就是说是是s[t]=s[1<<log(t)-1]或s[t-(1<<log(t))]

得代码 :
#include<bits/stdc++.h>
using namespace std;
const int N=100500;
long long a[]={};
bool pre(int n){
	if(n==1)return 1;
	int k=log2(n);
	if(1<<k==n)return !pre(1<<k-1);
	else{
		return !pre(n-(1<<k));
	} 
} 
int main(){
	long long t;
	cin>>t;
	while(t--){
		long long x;
		cin>>x;
		long long p=log2(x),cnt=1;
		for(int i=1;i<=p;i++){
			cnt*=2; 
		}
		cout<<pre(x)<<endl;
	}
	return 0;
}

3.方格取数

大意:

第 1 行三个正整数 n,m,k。

接下来 nn 行每行 mm 个整数,依次代表每个方格中的整数。

从 (1,1)出发,目标是 (n,m),只能向右或者向下走,但是你不能一次性往一个方向走大于等于 k 步。

求收集到的数字的和的最大值。

解析

看上去用DFS能A。但因为'k'的原因只能拿60pts,正解需用dp。

定义一个三维数组,分别存储在(i,j)的坐标上最大的收益,第三维为0/1(1表示必须改变方向),注释↓

AC:

#include<iostream>
using namespace std;
typedef long long ll;
const long long N=200,MIN=-1e18;
ll n,m,k,a[N+5][N+5],dp[N+5][N+5][2],ans=MIN;
/*不能连续往一个方向走k步,刷新方向后步数会重置
由于是在一个矩阵图形中进行移动并计算权值和,可以使用dfs
搜索或遍历所有的路径,计算所有路径的权值和
需要额外记录按照一个方向走的步数和当前权值和(可能有负数)
void dfs(int x,int y,int down,int right,ll sum){
	if(x==n&&y==m){
		ans=max(ans,sum);
		return ;
	}
	if(x<n && down+1<k)	dfs(x+1,y,down+1,0,sum+a[x+1][y]);
	if(y<m && right+1<k)dfs(x,y+1,0,right+1,sum+a[x][y+1]);
} 
int main(){
	cin>>n>>m>>k;	n=m=k=200;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++)	cin>>a[i][j]; 
	}
	dfs(1,1,0,0,a[1][1]);
	if(ans==-1e18)	cout<<"No Answer!";
	else cout<<ans;
	return 0;
}
*/
int main(){
/*dp[i][j][1/0]:到达第i行,第j列所经过数字之和的最大值,
	其中1代表是从上往下到达i,j,0代表从左往右到达i,j
到达第i行,第j列:
	1、可能是从上往下,每次走1步,连走1步,2步,3步...k步;
	所以设d[t]:代表从上往下,连走t步所经过的数字之和的最大值
	由此可得d[t] = dp[i - t][j] + sumt;
			//sumt代表从第i - t + 1行到第i行的所有数字之和;
			dp[i][j][1] = max(d[t]);
	2、可能是从左往右,每次走1步,连走1步,2步,3步...k步;
	所以设r[t]:代表从左往右,连走t步所经过的数字之和的最大值
	由此可得r[t] = dp[i][j - t] + sumr;
			//sumr代表从第j - t + 1列到第j列所有数字之和;
			dp[i][j][0] = max(r[t]);
所以ans = max(dp[i][j][1],dp[i][j][0]);
		1 <= t <= k - 1
*/	
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			dp[i][j][1]=dp[i][j][0]=MIN;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(i==1&&j==1){
				dp[i][j][1]=dp[i][j][0]=a[1][1];//处理起点
				continue; 
			}
			ll sumd=0,sumr=0,maxd=MIN,maxr=MIN;
			for(int t=1;i-t>=1&&t<=k-1;t++){	//从上往下
				sumd+=a[i-t+1][j];
				maxd=max(maxd,dp[i-t][j][0]+sumd);
				//dp[i - t][j][0]代表从左到右到达i - t,j
			}
			dp[i][j][1]=maxd;
			for(int t=1;j-t>=1&&t<=k-1;t++){	//从左往右 
				sumr+=a[i][j-t+1];
				maxr=max(maxr,dp[i][j-t][1]+sumr);
				//dp[i][j - t][1]代表从上到下到达i,j - t
			}
			dp[i][j][0]=maxr;
		}
	}
	ans=max(dp[n][m][1],dp[n][m][0]);
	if(ans<=-99600000)	cout<<"No Answer!";
	else cout<<ans;
	return 0;
} 

赛后AC

 4.圆圆中的方方

题目意思:给定了一个圆和一个矩形,求两个面积交。


sub1


就是样例,送分。


sub2


狗吠:长度超过了矩形对角线长,因此,矩形完全包含在了圆中。答案就是矩形面积。


sub3


狗吠:整个圆都包含在了矩形中,因此圆的面积就是答案。


sub4、sub5


需要考虑到正解,但是因为细节实现复杂,设置这部分分。


sub6


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


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


第一种和最后一种是平凡的,二三可以使用三角函数辅助计算。第二种情况:
左边三角形面积加上扇形面积。
扇形面积可以通过求扇形角度后得到。


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

#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1), eps = 1e-6;
double n, m, x, y, r;
double calc(double n, double m, double r) {
if (n > m)
swap(n, m);
if (n < eps || m < eps)
return 0;
if (r <= n)
return 0.25 * pi * r * r;
else if (r <= m) {
double tt = sqrt(r * r - n * n);double res = n * tt / 2.0;double ang = pi / 2 - acos(n / r);
res += ang / 2 * r * r;
return res;
} else if (r <= sqrt(n * n + m * m)) {
double t1 = sqrt(r * r - n * n), t2 = sqrt(r * r - m * m);double res = n * t1 / 2.0 + m * t2 / 2.0;double ang = pi / 2 - acos(n / r) - acos(m / r);
res += ang / 2 * r * r;
return res;
} else
return n * m;
}
int main() {
cin >> n >> m >> x >> y >> r;
cout << fixed << setprecision(10)
<< calc(x, y, r) + calc(x, m - y, r) + calc(n - x, y, r) +
calc(n - x, m - y, r)
<< endl;
return 0;
}

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

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

相关文章

HTML+CSS 基础第三季课堂笔记

一、CSS基础概念 CSS有两个重要的概念&#xff0c;分别是样式和布局 CSS的样式分为两种&#xff0c;一种是文字的样式&#xff0c;一种是盒模型的样式 CSS的另一个重要的特性就是辅助页面布局&#xff0c;完成HTML不能完成的功能&#xff0c;比如并排显示&#xff0c;比如精…

Flowable之任务撤回(支持主流程、子流程相互撤回)

撤回任务&#xff1a;主流程 > 主流程 处室主管【送科长审核】 处室主管【撤回科长审核】 流程日志 撤回任务&#xff1a;子流程 > 子流程 会办接收岗【送处室主管】 会办接收岗【撤回处室主管】 会办接收岗【同意】 撤回任务&#xff1a;子流程 > 主流程 处室主管…

秋招内推--招联金融2025

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

每日读则推(一)

v.避免,回避,撤销 n.黑花园蚁 Several animals are known to alter their behavior to avoid infections. But black garden v.改变,改动 n.传染病,感染,污染ants are th…

低空经济时代来临,挑战和机遇详细分析

低空经济作为一种新兴的经济形态&#xff0c;正逐步成为推动国民经济发展的新增长点。它依托于低空空域&#xff0c;涵盖通用航空、无人机应用、航空运动、低空旅游等多个领域&#xff0c;展现了广阔的发展前景和巨大的发展潜力。本文旨在详细分析低空经济时代来临所带来的挑战…

C语言数组和指针笔试题(三)

目录 字符数组四例题1例题2例题3例题4例题5例题6例题7 结果字符数组五例题1例题2例题3例题4例题5例题6例题7结果字符数组六例题1例题2例题3例题4例题5例题6例题7 结果 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412;个…

C语言、Eazy_x——井字棋

#include<graphics.h>char board_data[3][3] { { -,-,-},{ -,-,-},{ -,-,-}, };char current_piece o;//检测指定棋子玩家是否获胜 bool CheckWin(char c) {if (board_data[0][0] c && board_data[0][1] c && board_data[0][2] c)return true;if (…

html+css+js实现step进度条效果

实现效果 代码实现 HTML部分 <div class"box"><ul class"step"><li class"circle actives ">1</li><li class"circle">2</li><li class"circle">3</li><li class&quo…

Sui Bridge今日正式上线Sui主网

等待结束&#xff01;Sui Bridge现已上线Sui主网。 Sui Bridge是一种原生解决方案&#xff0c;用于在外部生态&#xff08;如以太坊&#xff09;之间转移资产。随着Web3的扩展和成熟&#xff0c;打破主要生态之间的壁垒&#xff0c;允许资产和数据自由流动变得尤为重要。 在W…

十大排序算法集锦

前言 众所周知&#xff0c;程序数据结构算法&#xff0c;由此可见算法的重要性。 为了了解算法&#xff0c;可以从排序算法入手&#xff0c;如下是十大排序算法的介绍(简介&#xff0c;原理&#xff0c;动图&#xff0c;代码&#xff0c;复杂性分析等)&#xff0c;希望可以带你…

代码随想录算法训练营Day18 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

目录 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先 530.二叉搜索树的最小绝对差 题目 530. 二叉搜索树的最小绝对差 - 力扣&#xff08;LeetCode&#xff09; 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值…

✨机器学习笔记(六)—— ReLU、多分类问题、Softmax、Adam、反向传播

Course2-Week2: https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Advanced%20Learning%20Algorithms/week2机器学习笔记&#xff08;六&#xff09; 1️⃣ReLU&#xff08;Rectified Linear Unit&#xff09;2️⃣多分类问题3️⃣Softmax4️⃣Adam5…

【Linux】进程+权限管理+软硬链接+其他命令

目录 1. man手册 2. find按文件名称 3. find按文件类型 4. date显示时间 5. cal显示日历 6. du文件大小 7. ln链接 8. 软连接&#xff0c;硬链接区别 9. 文本查找 10. wc统计文本(计算文件的Bytes数、字数或列数) 11. 查看文本内容&#xff1a; 1…

深度学习---------------------------深度循环神经网络

目录 回顾&#xff1a;循环神经网络总结深度循环神经网络代码 回顾&#xff1a;循环神经网络 RNN就一个隐藏的层&#xff0c;无法做的很宽&#xff0c;所以一般的做法是做的更深。&#xff08;更深的时候是说每一层做一点点的非线性。&#xff09; 怎么样把循环网络变深&#…

新版IDEA中Git的使用(四)——解决冲突

说明&#xff1a;之前介绍过新版IDEA中Git的基础操作、分支操作和回滚代码&#xff0c;本文介绍基于新版IDEA&#xff0c;如何解决代码冲突。 避免冲突 解决冲突的最好方法就是不要发生冲突&#xff0c;这里我介绍下面几点&#xff0c;可以避免代码冲突&#xff1b; 时常做pu…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十三集:制作小骑士的接触地刺复活机制以及完善地图的可交互对象

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作小骑士的接触地刺复活机制 1.制作动画以及使用UNITY编辑器编辑2.实现有攻击的地刺行为3.使用代码实现小骑士接触复活功能二、完善地图的可交互对象 1.制…

ThreadLocal原理解析及面试

基本使用 讲原理之前&#xff0c;我简单写个demo小程序 public class TestThreadLocal {public static void main(String[] args) throws InterruptedException {ThreadLocal<String> tl new ThreadLocal();/**主线程设置了一个值*/tl.set("SSSSSs");//tl.…

黑马头条day10 热点文章定时文章

day8-9是项目实战没有新东西 暂时跳过 进度到这里 但是后边的东西一直跑不通 调度一直失败 我也不知道哪里出了问题 整tm一天了也没搞出来 心态炸了 主要是xxl调度算是新内容 但是一直跑不出来就很烦 所谓的热点也就是计算权值然后存储到redis就行了 未解决&#xff1a; we…

【源码部署】springboot部署服务器之宝塔安装数据库远程无法链接问题

最近新搞了一个阿里云服务器&#xff0c;使用docker安装东西感觉太麻烦&#xff0c;于是用了宝塔。按了宝塔之后麻烦接连不断啊&#xff0c;最让人头疼的就是这个mysql无法远程链接问题&#xff0c;因此整理一下防止忘记在踩坑&#xff1a; 1、首先就是在宝塔面板中放行端口&a…

深度学习--------------------长短期记忆网络(LSTM)

目录 长短期记忆网络候选记忆单元记忆单元隐状态 长短期记忆网络代码从零实现初始化模型参数初始化实际模型训练 简洁实现 长短期记忆网络 忘记门&#xff1a;将值朝0减少 输入门&#xff1a;决定要不要忽略掉输入数据 输出门&#xff1a;决定要不要使用隐状态。 候选记忆单元…