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

本文主要是介绍上海市计算机学会竞赛平台(iai.sh.cn)十二月月赛(丙组)解题报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

多边形的内角和

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

题目描述

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

输入格式

单个整数:表示 n。

输出格式

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

数据范围

3 ≤ n ≤ 100 3\leq n\leq 100 3n100

样例数据

输入:

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 ≤ 100 1\leq n\leq 100 1n100

样例数据

输入:

3

输出:

***
**
*

解题思路

i i i行输出 n − i + 1 n-i+1 ni+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 × n n \times n n×n的方形纸片。
第3步:若还有剩余,小爱会将剩余的长宽为 n ∗ ( m − n ) n*(m-n) n(mn)的纸张作为现有纸张,代入第一步后重复之前过程,直至没有之后纸张剩余为止。
请问按如上操作,小爱最终会得到几张方形纸片?

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

请添加图片描述

输入格式

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

输出格式

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

数据范围

对于 30 % 30\% 30% 的数据, 1 ≤ n , m ≤ 100 1 \leq n ,m \leq 100 1n,m100
对于 60 % 60 \% 60% 的数据, 1 ≤ n , m ≤ 1 0 7 1 \leq n ,m \leq 10^7 1n,m107
对于 100 % 100 \% 100% 的数据, 1 ≤ n , m ≤ 1 0 13 1 \leq n ,m \leq 10^{13} 1n,m1013

样例数据

输入:

10 6

输出:

4

解题思路

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

  • n = m a x ( n − m , m ) n=max(n-m,m) n=max(nm,m)
  • m = m i n ( n − m , m ) m=min(n-m,m) m=min(nm,m)

直到 n = m n=m n=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 个数字的序列 a 1 , a 2 , . . . , a n ​ a_1,a_2,...,a_n​ a1,a2,...,an
,以及一个期望中位数 x。小爱想知道,最少再添加多少个数字,才能使序列中包含奇数个数字,且 x 为该序列的中位数?

输入格式

输入共三行:
第一行,一个正整数 n ,表示元素个数
第二行,n 个整数,分别表示 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an
第三行,一个整数 x ,表示期望中位数

输出格式

输入一个整数,表示答案

数据范围

对于 30 % 30\% 30% 的数据, 1 ≤ n ≤ 100 1 \leq n \leq 100 1n100
对于 60 % 60\% 60% 的数据, 1 ≤ n ≤ 1 0 4 1 \leq n \leq 10^4 1n104
对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1n105

样例数据

输入:

4
6 4 7 1
3

输出:

3

说明:

1321,就可以让3成为中位数

输入:

5
1 2 3 4 5
3

输出:

0

说明:

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

解题思路

我们可以先排个序,然后在输入的数列中寻找是否有 x x x,如果没有的话输出的 a n s ans ans就要多一个,然后再将小于 x x x的数和大于 x x x的数分别用 l e f t left left r i g h t right right记录下来,然后如果x有多个,就用 t i m e time time变量记录下来,然后如果 l e f t > r i g h t left>right left>right,就将 r i g h t right right加上 t i m e − 1 time-1 time1,反之, l e f t left left加上 t i m e − 1 time-1 time1。最终输出 a n s + a b s ( l e f t − r i g h t ) ans+abs(left-right) ans+abs(leftright)

代码实现

#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 的序列 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an ,请问该序列中,有多少个长度不小于 3的子段满足等差数列?

输入格式

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

输出格式

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

数据范围

对于 30 % 30\% 30% 的数据, 1 ≤ n ≤ 1001 ≤ n ≤ 100 1 \leq n \leq 1001≤n≤100 1n1001n100
对于 60 % 60\% 60% 的数据, 1 ≤ n ≤ 1 0 4 1 \leq n \leq 10^4 1n104
对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1 0 5 , − 1 0 9 ≤ a i ≤ 1 0 9 1 \leq n \leq 10^5, -10^9 \leq a_i \leq 10^9 1n105,109ai109

样例数据

输入:

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 longconst 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;
} 

这篇关于上海市计算机学会竞赛平台(iai.sh.cn)十二月月赛(丙组)解题报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/650494

相关文章

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP