2021暨南大学轩辕杯ACM程序设计新生赛题解

本文是2021年暨南大学轩辕杯ACM程序设计新生赛的赛题解析,涵盖了从A到J共10道题目。解析包括题意、思路和代码实现,主要涉及算法和程序设计技巧,如动态规划、哈希算法等。适合新手和进阶者参考学习。
摘要由CSDN通过智能技术生成

title : 2021暨南大学轩辕杯ACM程序设计新生赛
date : 2021-12-12
tags : ACM,练习记录
author : Linno


在这里插入图片描述

题目链接:https://ac.nowcoder.com/acm/contest/26008

进度:10/13

总结

难度比较适合新生,基本上都有出题,而难题上限也很高,共5道题没人过,最高过题数8道。

我不是出题人,如果大家没有需要的话这份题解不会更了。

排在前面有很多大佬啊,如果下面题解有问题希望可以对我提出指正。

A.残秋挽歌

题意

给一个长度为n的字符串,如果存在出现次数大于n/2个’a‘,那么输出原字符串,否则反转输出。

思路

签到题。记录a的个数就可了。复杂度 O ( n ) O(n) O(n)

代码

	cin>>n;
	cin>>str;
	for(int i=0;i<n;i++){
   
		if(str[i]=='a'){
   
			num++;
		}
	}
	if(num>n/2)	for(int i=n-1;i>=0;i--) cout<<str[i];
	else for(int i=0;i<n;i++) cout<<str[i]; 

B.突 发 恶 疾

题面

输出斐波那契第n项模998244353

思路

签到题+1。递推求斐波那契数列,边推边模。复杂度 O ( n ) O(n) O(n)

代码

  	cin>>n;
  	f[0]=0;f[1]=1;
  	for(int i=2;i<=n;i++) f[i]=(f[i-1]+f[i-2])%mod;
  	cout<<f[n]<<"\n";

C.突 发 恶 疾 plus

题面

把上一题的n数据范围调到1e18,且最多有1e5组数据。

来源:https://www.luogu.com.cn/problem/P4000

思路

使用矩阵快速幂。复杂度 O ( t l o g n ) O(tlogn) O(tlogn)

简单讲解:
F n = F n − 1 + F n − 2 F n − 1 = F n − 2 + F n − 3 [ F n F n − 1 ] = [ ( F n − 1 + F n − 2 ) F n − 1 ] = [ F n − 1 F n − 2 ] [ 1 1 1 0 ] 所 以 [ F n F n − 1 ] = [ F 2 F 1 ] [ 1 1 1 0 ] n − 2 F_n=F_{n-1}+F_{n-2} \\ F_{n-1}=F_{n-2}+F_{n-3}\\ [F_n\quad F_{n-1}]=[(F_{n-1}+F_{n-2})\quad F_{n-1}]=[F_{n-1}\quad F_{n-2}]\begin{bmatrix}1&1\\1&0\end{bmatrix}\\ 所以[F_n\quad F_{n-1}]=[F_2\quad F_1]\begin{bmatrix}1&1\\1&0\end{bmatrix}^{n-2} Fn=Fn1+Fn2Fn1=Fn2+Fn3[FnFn1]=[(Fn1+Fn2)Fn1]=[Fn1Fn2][1110][FnFn1]=[F2F1][1

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RWLinno

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值