CSDN 第三十七期竞赛题解

21 篇文章 0 订阅
4 篇文章 0 订阅

很少有时间来玩玩题目,上一次因为环境极为嘈杂的原因在时间上没有进入前十,挺遗憾的。
在 CSDN 参加的第一次没出锅的比赛。

大概只有最后一题值得好好讲讲。


T1:幼稚班作业

幼稚园终于又有新的作业了。 老师安排同学用发给同学的4根木棒拼接成一个三角形。 当然按照正常的逻辑,如果不能拼接成三角形。 必然要折断某个木棍来拼接三角形。 可是懒惰的小艺当然不会费力了! 如果拼接不成三角形,小艺就会把它拼接成类似边长 1 1 2的伪三角形(两边之和等于第3边)。 如果伪三角形都拼接不成那就不交作业!

分析

排序 + 三角形判断,注意四根木棍不需要全用。

#include<bits/stdc++.h>
int a[5];
using namespace std;
int main(){
	scanf("%d%d%d%d",a+1,a+2,a+3,a+4);
	sort(a+1,a+5);
	if(a[1]+a[2]>a[3]||a[2]+a[3]>a[4]) return puts("1"),0;
	else if(a[1]+a[2]==a[3]||a[2]+a[3]==a[4]) return puts("0"),0;
	puts("-1");
}

T2:异或和

小张找到了一个整数 N,他想问问你从 1 到 N 的所有不同整数的异或和是多少, 请你回答他的问题。( 1 ≤ N ≤ 1 0 5 1\leq N\leq 10^5 1N105

分析

本来以为需要奇偶数分类,没想到是个模拟。
题目限制变成 1 ≤ N ≤ 1 0 1 0 5 1\leq N \leq 10^{10^5} 1N10105 应该更好。

#include<bits/stdc++.h>
int n,ans;
using namespace std;
	int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) ans^=i;
	printf("%d",ans);
}

T3:大整数替换数位

以字符串的形式给你一个长度为 M M M 的整数 N N N,请你计算出对这个数进行一次操作后模 9 9 9 的值为 1 1 1 的所有可能的不同操作方式。

在一次操作中, 我们可以选择 N N N 的一个数位 N i N_i Ni,并把它替换成另一个不同的 0 0 0 9 9 9 范围之内的数 B B B,当且仅当它们选择的 i i i B B B 不同时两种操作方式不同。

分析

首先知道 9 9 9 的倍数其满足数位和仍为 9 9 9 的倍数。
那么问题变成

求对于一个由 n n n 个一位数组成的序列 N N N,试求改变一个 N i N_i Ni,使得 ∑ 1 ≤ i ≤ n N i \sum\limits_{1\leq i\leq n}N_i 1inNi 9 9 9 的倍数的方案数。

因为只能改一位,那么根据原本序列 N N N 的和模 9 9 9 的余数,逐位判断并累加答案即可。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int m,a[N],nw,ans;
int main(){
	scanf("%d",&m);
	for(int i=1;i<=m;i++) scanf("%1d",a+i),nw+=a[i];
	nw%=9;
	nw=(nw+8)%9;
	for(int i=1;i<=m;i++){
		if(!nw){
			if(a[i]==0) ans++;
		}
		else{
			if(a[i]+(9-nw)<10) ans++;
			if(a[i]-nw>-1) ans++;
		}
	}
	return 0;
}

T4:莫名其妙的键盘

有一个神奇的键盘,你可以用它输入a到z的字符,然而每当你输入一个元音字母(a,e,i,o,u其中之一)的时候,已输入的字
符串会发生一次反转! 比方说,当前输入了tw,此时再输入一个o,此时屏幕上的字符串two会反转成owt。 现给出一个
字符串,若用该键盘输入,有多少种方法可以得到?

分析

注意到“有多少种方法可以得到”实现起来相对麻烦,考虑将问题翻转一下变成将一个字符串不断从左右删除直到长度为 0 的方案数。我们知道一个序列被反转了偶数次后形态不变,而这里从左边删除代表了当前序列已被翻转了奇数次。

于是考虑使用区间 dp 解决。

d p i , j , 0 / 1 dp_{i,j,0/1} dpi,j,0/1 表示当前删除到区间为 [ i , j ] [i,j] [i,j] 并且上一次删除了最左 / 右边字符的方案数。

由区间 [ i , j ] [i,j] [i,j] [ i + 1 , j ] [i+1,j] [i+1,j] [ i , j − 1 ] [i,j-1] [i,j1] 转移,分四种情况:

  • s i s_i si 为元音:翻转一次,即 f i + 1 , j , 1 = f i + 1 , j , 1 + f i , j , 0 f_{i+1,j,1}=f_{i+1,j,1}+f_{i,j,0} fi+1,j,1=fi+1,j,1+fi,j,0
  • s i s_i si 为辅音:不用翻转,即 f i + 1 , j , 0 = f i + 1 , j , 0 + f i , j . 0 f_{i+1,j,0}=f_{i+1,j,0}+f_{i,j.0} fi+1,j,0=fi+1,j,0+fi,j.0
  • s j s_j sj 为元音:翻转一次,即 f i , j − 1 , 0 = f i , j − 1 , 0 + f i , j , 1 f_{i,j-1,0}=f_{i,j-1,0}+f_{i,j,1} fi,j1,0=fi,j1,0+fi,j,1
  • s i s_i si 为辅音:不用翻转,即 f i + 1 , j , 1 = f i + 1 , j , 1 + f i , j , 1 f_{i+1,j,1}=f_{i+1,j,1}+f_{i,j,1} fi+1,j,1=fi+1,j,1+fi,j,1

那么很明显答案 A n s Ans Ans
A n s = ∑ i = 1 n ( f i , j , 0 + f i , j , 1 ) Ans=\sum\limits_{i=1}^{n}(f_{i,j,0}+f_{i,j,1}) Ans=i=1n(fi,j,0+fi,j,1)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
char s[205];
LL ans,dp[205][205][2];
bool ck(char ch){
	if(ch=='a'||ch=='u'||ch=='o'||ch=='e'||ch=='i') return 1;
	return 0;
}
int main(){
	scanf("%s",s+1);
	int ls=strlen(s+1);
	dp[1][ls][1]=1;
	for(int l=ls;l;l--){
		for(int i=1;i+l-1<=ls;i++){
			int j=i+l-1,cki=ck(s[i]),ckj=ck(s[j]);
			if(cki) dp[i+1][j][0]+=dp[i][j][1];
			if(!cki) dp[i+1][j][0]+=dp[i][j][0];
			if(ckj) dp[i][j-1][1]+=dp[i][j][0];
			if(!ckj) dp[i][j-1][1]+=dp[i][j][1];
		}
	}
	for(int i=1;i<=ls;i++) ans+=dp[i][i][0]+dp[i][i][1];
	return 0;
}

感觉最后一题题解敲得超详细,不妨多支持一下?

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《算法艺术与信息学竞赛题pdf》是一本介绍算法艺术和信息学竞赛题的教材。它通过详细析一系列典型的竞赛题目,讲了如何使用不同的算法和数据结构来决这些问题。 在这本教材中,作者首先介绍了算法和信息学竞赛的基本知识,包括常用的数据结构和算法思想。然后,他通过具体的例子和题目,展示了如何应用这些知识来决实际问题。每个题目都有详细的析过程,包括问题的分析、算法的设计和优化等内容。 这本教材的特点之一是注重实践。作者通过大量的实例和练习题,帮助读者巩固所学的知识,并掌握决问题的方法。此外,他还提供了一些常见的竞赛技巧和经验,帮助读者在竞赛中取得好的成绩。 《算法艺术与信息学竞赛题pdf》适合对算法和信息学竞赛感兴趣的读者。无论是初学者还是有一定基础的读者,都可以从中受益。通过学习这本教材,读者不仅可以提高决问题的能力,还可以培养逻辑思维和计算机编程的能力。 总之,这本教材提供了一种全面的学习算法和信息学竞赛的方式。通过深入浅出的讲和丰富的实例,它帮助读者建立起坚实的算法基础,提高决问题的能力,并在竞赛中取得优异的成绩。 ### 回答2: 算法艺术与信息学竞赛题pdf是一本以算法和信息学竞赛题为内容的电子书,提供了有关这些题目的详细答。该书的出版旨在帮助读者更好地理和掌握算法和信息学竞赛的核心知识和技巧。 首先,这本书介绍了一些常见的算法和数据结构,如贪心算法、动态规划、图论等。通过逐一析题目,并给出相应的算法设计和实现思路,读者可以学习到不同类型题目的题方法和技巧。 其次,该书还强调了对问题进行建模的重要性。在决问题时,合理的问题建模可以将问题转化为更易于理和求的形式。书中通过具体的例子,教给读者如何抽象问题,构建合适的数据结构来决实际问题。 此外,该书还提供了大量典型题目的详细答,包括题思路、具体实现和代码示例等。读者可以通过参考这些题目的答,了不同类型题目的题思路,提高自己的题能力。 总之,算法艺术与信息学竞赛题pdf是一本帮助读者提高算法和信息学竞赛能力的实用电子书。通过学习其中的知识和技巧,读者可以更好地决相关问题,并在竞赛中获得优异成绩。 ### 回答3: 《算法艺术与信息学竞赛题PDF》是一本内容丰富的电子书,主要讲算法艺术和信息学竞赛中常见的题目法。该书以清晰简洁的语言,详细介绍了题思路和具体实现过程。 这本电子书中涵盖了多个题型,包括排列组合、图论、动态规划、贪心算法等。通过这些经典的题目,读者可以了到不同算法决问题时的特点和应用场景,提升算法设计和编程能力。 该电子书特色之一是讲了信息学竞赛中被广泛使用的算法和数据结构,如并查集、最短路径算法、网络流等。阅读该书可以让读者对这些常用的算法有更深入的理,从而在决实际问题时能够选择适当的算法。 此外,该电子书为了方便读者理,还提供了大量的实例,以演示不同算法的具体应用。这些实例不仅帮助读者掌握算法的思维方式,还能够培养读者的问题分析和决能力。 总之,《算法艺术与信息学竞赛题PDF》是一本非常实用的电子书,适合对算法和信息学竞赛感兴趣的读者。通过阅读该书,读者可以提高题速度和准确度,增强算法设计和编程能力,对决问题的思路和方法有更深入的认识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值