上海市计算机学会竞赛平台(iai.sh.cn)十二月月赛(丙组)解题报告

2022.10 上海市计算机学会月赛试题 2022.10 上海市计算机学会月赛 阅读详情

多边形的内角和

内存限制: 256 Mb时间限制: 1000 ms

题目描述

一个 n 条边的多边形,其内角和公式为 180×(n−2)180\times(n-2)180×(n−2)。给定 n,请计算并输出 n 边形的内角和。

输入格式

单个整数:表示 n。

输出格式

单个整数:表示 n 边形的内角和。

数据范围

3≤n≤1003\leq n\leq 1003≤n≤100

样例数据

输入:

3

输出:

180

输入:

5

输出:

540

解题思路

根据上述公式,输出即可。

代码实现

#include <bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	cout<<(n-2)*180<<endl;
	return 0;
}

星号三角阵(二)

内存限制: 256 Mb时间限制: 1000 ms

题目描述

给定一个整数 n,输出一个 n 行 n 列的星号三角阵,直角位于图形的左上角。例如当 n=4 时,输出

****
***
**
*

输入格式

单个整数表示 n。

输出格式

共 n 行:表示一个星号三角阵。

数据范围

1≤n≤1001\leq n\leq 1001≤n≤100

样例数据

输入:

3

输出:

***
**
*

解题思路

第iii行输出n−i+1n-i+1n−i+1个∗*∗

代码实现

#include <bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=n-i+1;j>=1;j--)
			cout<<"*";
		cout<<endl;
	}
	return 0;
}

折纸

内存限制: 256 Mb时间限制: 1000 ms

题目描述

小爱手中有一张矩形纸张,他想把这张纸分成若干正方形纸片,具体分法如下:

第1步:小爱会先确定纸张的长宽,假设短边长度为n,长边长度为m。
第2步:小爱会将短边沿直角平分线对折后剪去,从而得到一个n×nn \times nn×n的方形纸片。
第3步:若还有剩余,小爱会将剩余的长宽为n∗(m−n)n*(m-n)n∗(m−n)的纸张作为现有纸张,代入第一步后重复之前过程,直至没有之后纸张剩余为止。
请问按如上操作,小爱最终会得到几张方形纸片?

例如:一开始,小爱有一张 10×610 \times 610×6 的纸张,按他的分割方法,最终他可以获得 4 张方形纸片,具体过程如下图所示:

请添加图片描述

输入格式

输入共两个正整数,表示初始矩形纸张的长宽 n,m

输出格式

输出题目所求能获得的矩形个数

数据范围

对于 30%30\%30% 的数据,1≤n,m≤1001 \leq n ,m \leq 1001≤n,m≤100
对于 60%60 \%60% 的数据,1≤n,m≤1071 \leq n ,m \leq 10^71≤n,m≤107
对于 100%100 \%100% 的数据,1≤n,m≤10131 \leq n ,m \leq 10^{13}1≤n,m≤1013

样例数据

输入:

10 6

输出:

4

解题思路

取n,m中较大的数为长,另一个为宽,然后不断地

  • n=max(n−m,m)n=max(n-m,m)n=max(n−m,m)
  • m=min(n−m,m)m=min(n-m,m)m=min(n−m,m)

直到n=mn=mn=m即可,但是ans要赋初值为1,因为最终总会多折出一个正方形

代码展示

#include <bits/stdc++.h>
using namespace std;

long long n,m,ans=1;

int main(){
	cin>>n>>m;
	long long a=n,b=m;
	n=max(a,b);
	m=min(a,b);
	while(n-m!=0){
		long long a=n,b=m;
		n=max(a-b,b);
		m=min(a-b,b);
		ans++;
	}
	cout<<ans<<endl;
	return 0;
}

但是,我们这里犯了一个非常重大的错误,我们在之前的比赛中曾翻过一个错误,就是当n无穷大时,m无穷小时,就会超时,所以我们上面的代码在最终评测中只得到了60分。

优化思路

我们完全可以通过算式求出一个长方形可以切出多少个宽度为m的正方形,然后再将长和宽转换一下即可

代码展示

#include <bits/stdc++.h>
using namespace std;

long long n,m,ans=0;

int main(){
	cin>>n>>m;
	while(true){
		ans+=n/m;
		long long f=n%m;
		if(f==0)
			break;
		else{
			n=m;
			m=f;
		}
	}
	cout<<ans<<endl;
	return 0;
}

中位数(二)

内存限制: 256 Mb时间限制: 1000 ms

题目描述

中位数,就指将所有数字排序后,位置在最中间的数。

给定 n 个数字的序列 a1,a2,...,an​a_1,a_2,...,a_n​a1​,a2​,...,an​​
,以及一个期望中位数 x。小爱想知道,最少再添加多少个数字,才能使序列中包含奇数个数字,且 x 为该序列的中位数?

输入格式

输入共三行:
第一行,一个正整数 n ,表示元素个数
第二行,n 个整数,分别表示 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​
第三行,一个整数 x ,表示期望中位数

输出格式

输入一个整数,表示答案

数据范围

对于 30%30\%30% 的数据, 1≤n≤1001 \leq n \leq 1001≤n≤100
对于 60%60\%60% 的数据, 1≤n≤1041 \leq n \leq 10^41≤n≤104
对于 100%100\%100% 的数据, 1≤n≤1051 \leq n \leq 10^51≤n≤105

样例数据

输入:

4
6 4 7 1
3

输出:

3

说明:

加1个3 和 2个1,就可以让3成为中位数

输入:

5
1 2 3 4 5
3

输出:

0

说明:

不用添加任何数字,3已经是中位数

解题思路

我们可以先排个序,然后在输入的数列中寻找是否有xxx,如果没有的话输出的ansansans就要多一个,然后再将小于xxx的数和大于xxx的数分别用leftleftleft和rightrightright记录下来,然后如果x有多个,就用timetimetime变量记录下来,然后如果left>rightleft>rightleft>right,就将rightrightright加上time−1time-1time−1,反之,leftleftleft加上time−1time-1time−1。最终输出ans+abs(left−right)ans+abs(left-right)ans+abs(left−right)

代码实现

#include <bits/stdc++.h>
using namespace std;

const int MAXN=1e5+10;

int n,a[MAXN],x,ans;

int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	cin>>x;
	bool f=false;
	int time=0;
	for(int i=1;i<=n;i++){
		if(a[i]==x){
			f=true;
			time++;
		}
	}
	if(!f){
		a[n+1]=x;
		sort(a+1,a+n+1);
		ans=1;
	}
	else{
		sort(a+1,a+n);
		ans=0;
	}
	int left=0,right=0;
	for(int i=1;i<=n;i++){
		if(a[i]<x)
			left++;
		else if(a[i]>x)
			right++;
	}
//	cout<<"L:"<<left<<endl;
//	cout<<"R:"<<right<<endl;
	if(left>right){
		if(time>1){
			right+=time-1;
		}
	}
	if(left<right){
		if(time>1){
			left+=time-1;
		}
	}
	cout<<ans+abs(left-right)<<endl;
	return 0;
}

等差数列

内存限制: 256 Mb时间限制: 1000 ms

题目描述

等差数列 指从第二项起,每一项与它的前一项的差等于同一个常数的一种数列,且这个常数叫做等差数列的公差。

例如:数列 1 5 9 13 就是一个公差为 4 的等差数列。

现给定一个长度为 n 的序列 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​ ,请问该序列中,有多少个长度不小于 3的子段满足等差数列?

输入格式

输入共两行:
第一行,一个正整数 n,表示给定序列长度
第二行,n 个整数,分别表示序列的每一项 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​

输出格式

输出一个整数,表示满足条件的子段个数。

数据范围

对于 30%30\%30% 的数据, 1≤n≤1001≤n≤1001 \leq n \leq 1001≤n≤1001≤n≤1001≤n≤100
对于 60%60\%60% 的数据, 1≤n≤1041 \leq n \leq 10^41≤n≤104
对于 100%100\%100% 的数据, 1≤n≤105,−109≤ai≤1091 \leq n \leq 10^5, -10^9 \leq a_i \leq 10^91≤n≤105,−109≤ai​≤109

样例数据

输入:

10
-1 1 3 3 3 2 3 2 1 0

输出:

5

说明:

区间[1,3],[3,5],[7,10],[7,9],[8,10]均满足等差数列要求

解题思路

先将这组数列的差分求出来用另一个数组存着,然后把差分数组相等的个数记录下来,然后如果相等ans++,否则用求和公式将数列中ans个数的所有排列方式算出来,用rl吧结果加上,然后ans变回原值。输出rl即可

代码实现

#include <bits/stdc++.h>
using namespace std;
#define int long long

const int MAXN=1e5+10;

int n,a[MAXN],b[MAXN],ans,rl=0;

signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<n;i++){
		b[i]=a[i+1]-a[i];
	}
	ans=2;
//	for(int i=1;i<n;i++)
//		cout<<b[i]<<" ";
	for(int i=1;i<n;i++){
		if(b[i]==b[i+1])
			ans++;
		else{
			if(ans>=3){
				rl+=(ans-1)*(ans-2)/2;
			}
			ans=2;
		}
	}
	cout<<rl<<endl;
	return 0;
} 
上海12月月赛丙组解题报告 上海12月丙组解题报告 阅读详情

相关推荐

信息学奥赛C++编程:多边形内角和

信息学奥赛C++编程:(循环结构)多边形内角和

3204

上海市计算机学会竞赛平台(iai.sh.cn)2023三月月赛(丙组)解题报告

MYOI

Net_bad的博客 1820

焦距与视差的关系及其对深度估计的影响

焦距在立体视觉中的作用至关重要,它直接影响视差的大小,从而影响深度估计的精度。焦距越长,视差差异越大,物体的深度估计就越精确。这一关系使得焦距长的相机在一些需要高精度深度估计的应用场景中更加优越。了解焦距与视差的关系,对于优化相机配置和提升深度估计精度具有重要意义。在实践中,选择合适的焦距对于获得精确的深度信息至关重要,特别是在自动驾驶、虚拟现实、三维重建等领域,精确的深度估计能够提供更好的用户体验和技术支持。

计算机科学与技术专业学生的成长之路 1671

上海市计算机学会竞赛平台丙组比赛目录及题解持续更新中

持续更新中。。。

长春高老师编程 1万+

告别‘小目标’丢失!手把手复现DNANet红外检测网络(PyTorch版)

本文详细介绍了如何使用PyTorch从零实现DNANet红外小目标检测网络,重点解析了DNIM模块和CSAM注意力机制的设计与实现。通过实战教程,帮助开发者解决红外小目标检测中的特征提取和训练调参难题,适用于军事侦察、安防监控等场景。

weixin_28701593的博客 252

MDB协议中设备级别和选项(Levels and Options)

MDB协议的LEVEL级别介绍

hbstart的博客 939

上海市计算机学会竞赛平台(iai.sh.cn)2023一月月赛(丙组)解题报告

上海市计算机学会竞赛平台(iai.sh.cn)2023一月月赛(丙组)解题报告

Net_bad的博客 2074

ZYNQ软件复位重启、程序跳转的实现方法(Multiboot)

目录一、增加FSBL的调试信息 一、增加FSBL的调试信息 启动过程的调试信息如下: Xilinx First Stage Boot Loader Release 2016.4 Jan 19 2020-10:35:00 Devcfg driver initialized Silicon Version 3.1 Boot mode is QSPI Single Flash Informat...

weixin_41922484的博客 2万+

上海市计算机学会竞赛平台(iai.sh.cn)十月月赛(丙组)解题报告

上海市计算机学会竞赛平台(iai.sh.cn)十月月赛(丙组)解题报告

Net_bad的博客 1095

南邮-软件设计实验(C++版)

南邮软件设计 A档 一、分数统计 课题内容:   设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。 课题要求: (1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。 示例代码: #include<bits/stdc++.h> using...

Dainelcw 1万+

单细胞转录组肿瘤细胞识别:inferCNV与CopyKAT实战解析

单细胞转录组测序(scRNA-seq)是解析肿瘤微环境的重要技术,但如何从海量细胞中准确区分恶性细胞与正常细胞,始终是数据分析的关键难题。传统marker注释在异质性肿瘤中常失效,而基于拷贝数变异(CNV)的推断方法为这一问题提供了更稳健的解决路径。CNV通过检测染色体大片段的增益或缺失,可在无先验标记的情况下识别恶性细胞,尤其适合实体瘤研究。inferCNV利用染色体滑动窗口分析相对表达量,生成直观的CNV热图;CopyKAT则结合高斯混合模型对每个细胞直接分类,输出肿瘤/正常/非整倍体标签。本文从原理出

weixin_31236101的博客 250

上海市计算机学会竞赛平台(iai.sh.cn)十月月赛(丙组)解题报告(前4题AK)

上海市计算机学会竞赛平台(iai.sh.cn)十月月赛(丙组)解题报告(前4题AK)

Net_bad的博客 1057

数据分片的三种方式:哈希、一致性哈希、按照数据范围分片

数据分片就是按照一定的规则,将数据集划分成相互独立、正交的数据子集,然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则,可将系统中的数据分布在不同的物理数据库中,达到提升应用系统数据处理速度的目的。三种常用的数据分片方式:1. 哈希分片2. 一致性哈希分片(Consistent Hash)3. 按照数据范围分片(Range Based)数据分片的应用场景:1. 数据库扩展2. 分布式缓存对集群部署多个缓存节点,提高缓存的处理能力。

wjianwei666的专栏 1134

推荐——上海市计算机学会竞赛平台

今天推荐个网站:上海市计算机学会竞赛平台。里面题挺多的,还可以。

SUPER_SHARK_C的博客 1330

python-pandapower电力系统潮流计算(算例8:ieee33节点潮流计算))

python-pandapower电力系统潮流计算(算例8:ieee33节点潮流计算))

总裁余(余登武)博客 5033

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上海市计算机学会竞赛平台2022年11月月赛乙组 总结

3h.第一次提交:320pts。比赛结束前:400pts。

SandwichBK的博客 1351

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IAISH(上海月赛)2021.3乙组好题

比如71的正数写法71的平衡三进制写法则是(10z0z),而-71的写法则是(z0101),若z表示-1,会发现其实正数中的"1"在负数写法中就是"z"(-1),正数中的”z“在负数写法中就是"1",0不变。它们按照Power(i - 1)个红,Power(i - 1)个绿,Power(i - 1)个黄的顺序呈一列排着,现在请问第x排上的灯的颜色是什么?这道题确实是一道练习思维的不错的题,如果有寒假做题计划的话(比如一天3题)这种类型的题推荐放在中间做,以为美好的一天从水题开始,愉快的一天从水题结束。

ckewuwenhua的博客 865

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上海市计算机学会竞赛平台一星级[数砖数]

给定两个整数 nn 与 mm,请计算从左上角开始的 nn 行 mm 列的区域中,有多少瓷砖(每块瓷砖用一个。前4行前4列由4个完整的地砖组成。

X15267387959的博客 482

上海计算机学会2023年5月月赛C++乙组T2集体舞

n名演员围成一个圆圈跳集体舞,每名演员都有一个位置。演员与位置的编号都是从1开始到n结束。最初,每个演员都站在自己对应的位置编号上。 在舞蹈进行的过程中,陆续会出现若干变换,这些变变换形分成两种类型: 给定一个字符序列,表示集体舞依次经历的变换,输出每个位置在舞蹈结束后的演员编号。

长春高老师编程 737

东方博宜OJ 1317 - 【入门】正多边形每个内角的度数?

东方博宜OJ 1317 - 【入门】正多边形每个内角的度数?

girejifdhf的博客 3135

[不公开]iai.sh.cn三月月赛-丙组-T5

#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int arrive[1005]; int main() { int n,h1,m1,h2,m2; char t; cin >> n; for (int i =...

paperboat2020风彩 852

上海计算机学会2022年12月月赛C++丙组T3折纸

内存限制: 256 Mb时间限制: 1000 ms。输入共两个正整数,表示初始矩形纸张的长宽 n,m。请问按如上操作,小爱最终会得到几张方形纸片?输出题目所求能获得的矩形个数。

长春高老师编程 421

上海市计算机学会竞赛平台2023年3月月赛 丙组 题解

cin >> n;return 0;cin >> n;i

lyoi20210204的博客 649

上海市计算机学会竞赛平台乙组比赛目录及题解持续更新中

T2 消除交叉 T3 竞速溜冰 T4 多米诺骨牌。T2 放置拼块 T3 制作哒宝 T4 区间交集。T1 发红包 T2 图的三染色 T3 最大子集。T2 千层背包 T3 随处游荡 T4 打字。T2 赛车 T3 围三角 T4 退课。T3 树的匹配 T4 平分子集(三)T3 炼制合金 T4 数三角形(二)T3 降低均值 T4 加与乘(二)T3 子集和(三) T4 社交软件。T3 树的最长路 T4 最大频率。T3 字符填充 T4 看小说。

长春高老师编程 9683

上海计算机学会12月月赛 丙组题解

上海计算机学会12月月赛 丙组题解

超哥聊信奥 1453

上海市计算机学会竞赛平台2023年5月月赛

从1开始,挨个在原数后面加0或1,用余数定理算余数,同时用余数作剪枝(因为题目要求最小倍数,所以就不用搜这个数,同时深搜就不可行),一直搜到余数为0为止,但是为了输出,用于宽搜的队列还要有父节点的编号与本身的选择(0或1)。给定一个长度为 n 的排列,每次操作,你可以选择其中一个数字,并将它放到开头或结尾,请问最少多少次操作,才能使该排列变为升序?特别注意,若 n 是奇数,则在翻转变换下,(n+1)/2 号位置上的演员位置不变。这题先存图,然后dfs搜索目的地路径,然后“打卡”,思路简单。

GaoGuohao2022的博客 703
上一篇: AtCoder Beginner Contest 281 (https://atcoder.jp/contests/abc281) A~D
下一篇: USACO 2021 January Contest, Bronze
Net_bad
博客等级 码龄4年 331粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值