洛谷刷题C语言:LJESTVICA、FUNGHI、LJESNJAK、AUTORI、PLANINA

记录洛谷刷题QAQ


[COCI2012-2013#5] LJESTVICA

题目背景

Veronica 在音乐学院上学,她拿到了一张只有音符的乐谱,并且需要识别其所使用的音阶。

题目描述

在这个问题中,我们只考虑 A 小调和 C 大调。其中 A 小调音阶为 { A , B , C , D , E , F , G } \{ A,B,C,D,E,F,G \} {A,B,C,D,E,F,G},C 大调音阶为 { C , D , E , F , G , A , B } \{ C,D,E,F,G,A,B \} {C,D,E,F,G,A,B}

称每个音阶的第一个、第四个和第五个音为主调,你需要判断给定的乐谱是 A 小调或是 C 大调。

判断方法:判断此乐谱中每个小节的第一个音符,是 A 小调的主调或是 C 大调的主调,最后判断哪个音阶的主音个数更多。如果两者个数一样多,取整个乐谱的最后一个音符所属的音阶。

最后一个音符为 A 则属于 A 小调,否则属于 C 大调

输入格式

输入共一行,一个字符串,表示给出的乐谱,保证给出的乐谱中只包含 ${ $A,B,C,D,E,F,G,| } \} },其中 | 用来分割小节。

输出格式

输出共一行,一个字符串 C-dur 表示 C 大调,或 A-mol 表示 A 小调。

样例 #1

样例输入 #1

AEB|C

样例输出 #1

C-dur

样例 #2

样例输入 #2

CD|EC|CD|EC|EF|G|EF|G|GAGF|EC|GAGF|EC|CG|C|CG|C

样例输出 #2

C-dur

提示

【样例解释#1】

两个小节的第一个音符分别为 AC,由于两个音阶的主调个数相同,取后出现的 C,即 C 大调。


【数据范围】

对于 100 % 100\% 100% 的数据,保证 5 ≤ 5\le 5 乐谱长度 ≤ 100 \le100 100,且给出的乐谱合法。


【说明】

本题分值按 COCI 原题设置,满分 50 50 50

题目译自 COCI2012~2013 CONTEST #5 T1 LJESTVICA

代码如下

#include
#include
#include
#include 


int main(){
	char a[1001];
	scanf("%s",&a);
	int n=strlen(a),x=0,y=0;//x计C调主调的个数,y计A调主调的个数
	for(int i=0;i<=n-1;i++){
		if(i==0 || a[i-1]=='|'){//判断是不是每个小节的第一个,注意a[0]也是
			if(a[i]=='C' || a[i]=='F' || a[i]=='G') x++;//C调主调
			if(a[i]=='A' || a[i]=='D' || a[i]=='E') y++;//A调主调
		}
	}
	if(x>y) printf("C-dur\n");
	if(x<y) printf("A-mol\n");
	if(x==y){//若主调个数相等
		//查看最后一个字符
		if(a[n-1]=='C') printf("C-dur\n");
		else printf("A-mol\n");
	}
	return 0;
}

[COCI2014-2015#5] FUNGHI

题目描述

Hansel 和 Gretel 得到了一块分成 8 8 8 片的披萨,每片上面有不同数量的蘑菇,表示为 S 1 , S 2 , . . . , S 8 S_1,S_2,...,S_8 S1,S2,...,S8。Gretel 很喜欢蘑菇,她想要找到连续的四片披萨使得上面的蘑菇最多。

输入格式

一共 8 8 8 行,每行一个正整数 S i S_i Si i i i 为行数),表示披萨片上的蘑菇数。

输出格式

一行一个正整数,表示连续的四片披萨上最多有几个蘑菇。

样例 #1

样例输入 #1

5
2
1
4
5
1
2
3

样例输出 #1

12

样例 #2

样例输入 #2

2
6
5
3
3
7
2
6

样例输出 #2

19

提示

对于 100 % 100\% 100% 的数据, 0 ≤ S i ≤ 50 0 \leq S_i \leq 50 0Si50

译自 COCI 2014/2015 CONTEST #5。

代码如下

#include
#include
#include
#include 



int dat[20],ans,now;
int main(){
    for(int i = 0;i < 8;i++)
	{	
		scanf("%d",&dat[i]);
	}
    for(int i=0;i<8;i++){
        now=0;
        for(int j=i,k=0;k<4;j=(j+1)%8,k++)
		now+=dat[j];
        if(now>ans)ans=now;
    }
    printf("%d\n",ans);
}

[COCI2008-2009#5] LJESNJAK

题目描述

不久以前,在操作系统还未像今天如此发达的时候,计算机无法处理克罗地亚字母表中的某些字母,于是程序员被允许用二到三个计算机能够显示的字符替换这个不能显示的字母,如下表:

不能显示的字母 用来替换的字符
č c=
ć c-
dz=
ñ d-
lj lj
nj nj
š s=
ž z=

例如说,ljes=njak 这一个字符串可以用来表示克罗地亚字母表中的六个字母:lješnjak

现在给出一个字符串,请你求出解码后这一个字符串里面包含多少个克罗地亚字母表中的字母。

克罗地亚字母表中的字母除了有上表中的几个字母外,还有英语中的 a~z 这 26 个字母。

输入格式

输入仅一行,一个字符串,表示一个按上述方式编码的字符串。

输出格式

输出仅一行,表示解码之后的字符串包含的克罗地亚字母表中的字母个数。

样例 #1

样例输入 #1

dz=ak

样例输出 #1

3

样例 #2

样例输入 #2

ljes=njak

样例输出 #2

6

提示

【数据范围】

对于所有数据,满足字符串的长度不超过 100 100 100,且仅包含小写字母和 -= 字符。

【题目来源】

本题来源自 COCI 2008-2009 CONTEST 5 T1 LJESNJAK,按照原题数据配置,满分 30 30 30 分。

由 Eason_AC 翻译整理提供。

代码如下

#include
#include
#include
#include 


char str[1001];			 //定义字符串
int le = 0, ans = 0; //定义字符串长度与结果
int main()
{
	scanf("%s",&str);
	le = strlen(str);		 //求字符串长度
	for (int i = 0; i < le; i++) //注意起始为0
	{
		if (str[i] == 'c' && str[i + 1] == '=')
			ans++, i++; //查找特别替换字符,计数,并推i
		else if (str[i] == 's' && str[i + 1] == '=')
			ans++, i++;
		else if (str[i] == 'z' && str[i + 1] == '=')
			ans++, i++;
		else if (str[i] == 'c' && str[i + 1] == '-')
			ans++, i++;
		else if (str[i] == 'd' && str[i + 1] == '-')
			ans++, i++;
		else if (str[i] == 'l' && str[i + 1] == 'j')
			ans++, i++;
		else if (str[i] == 'n' && str[i + 1] == 'j')
			ans++, i++;
		else if (str[i] == 'd' && str[i + 1] == 'z' &&str[i + 2] == '=')
			ans++, i += 2;
		else
			ans++; //无需替换,直接计数
	}
	printf("%d\n",ans);
	return 0;
}

[COCI2009-2010#4] AUTORI

题目背景

伟大的科学发现一般是以科学家的姓氏命名,比如说,最流行的非对称密码系统 RSA 是由三位叫做 Rivest、Shamir 和 Adleman 的科学家发现的,而更为熟知的则是 Knuth-Morris-Pratt 算法,这个算法是由三位叫做 Knuth、Morris 和 Pratt 的科学家命名的。

题目描述

科学论文会大量引用一些早期的著作,因此在一个论文中出现两种不同的命名约定并不少见。这两种不同的命名约定分别是:

  • 长变体,由每个作者姓氏的完整单词由连字符连接而成,例如 Knuth-Morris-Pratt
  • 短变体,仅由每个作者姓氏的第一个字符拼接而成,例如 KMP

现在,你发现了一篇论文中同时使用了长变体和短变体这两种命名约定,这让你感到很不愉快,因此你想编写一个程序,将所有的长变体变为短变体。

输入格式

输入仅一行,一个字符串,代表在论文中出现的长变体。

每一个长变体中的单词开头一定是大写字母

输出格式

输出仅一行,一个字符串,代表长变体经过变换以后的短变体。

样例 #1

样例输入 #1

Knuth-Morris-Pratt

样例输出 #1

KMP

样例 #2

样例输入 #2

Mirko-Slavko

样例输出 #2

MS

样例 #3

样例输入 #3

Pasko-Patak

样例输出 #3

PP

提示

【数据范围】

对于所有数据,满足字符串的长度不超过 100 100 100,且仅包含大小写英文字母和连字符 -

【题目来源】

本题来源自 COCI 2009-2010 CONTEST 4 T1 AUTORI,按照原题数据配置,满分 30 30 30 分。

由 Eason_AC 翻译整理提供。

代码如下

#include
#include
#include
#include 


int main()
{
	char num[1001];
	scanf("%s",&num);
	
	int len = strlen(num);
	for(int i = 0;i < len;i++)
	{
		if(num[i] >= 'A'&&num[i] <= 'Z')
			printf("%c",num[i]); 
	}
	return 0;	
} 

[COCI2009-2010#4] PLANINA

题目背景

Mirko 和 Slavko 正在拍摄一部改编自科幻小说 Chicks in space 13 的电影。剧本要求他们呈现出不同的世界,所以他们决定在绿屏幕前拍摄整部电影,之后再添加 CGI 背景。Mirko 听说生成人工地形最好的办法是使用中点位移算法

题目描述

为了执行这个算法,Mirko 选择了 4 4 4 个点组成了一个完美正方形。然后他开始执行以下步骤:

  • 在每个正方形的每一条边上,Mirko 都在正中间添加一个新点。这个新点上的地形高度是他所在这条边两个点上的平均高度。
  • 在每个正方形的正中间,Mirko 也添加了一个新点。这个新点上的地形高度是所有 4 4 4 个正方形定点的平均高度加上一个小的随机值。

Mirko 在执行完一次上面的所有操作后拥有了 4 4 4 个新的方块。于是他不断地新建正方形,直到他对结果满意为止。下图说明了算法的初始状态、 1 1 1 次迭代和 2 2 2 次迭代。
洛谷刷题C语言:LJESTVICA、FUNGHI、LJESNJAK、AUTORI、PLANINA_第1张图片

Mirko 发现到有些点属于不止一个正方形,为了减少内存消耗,他只存储这些点一次,但是一旦这个点存储进去了,它就会永远储存在内存中。现在他想请你编写一个程序,告诉他经过 n n n 次迭代之后,总共需要在内存中存储多少点。

输入格式

输入仅一个整数 n n n,表示迭代的次数。

输出格式

输出仅一个整数,表示 n n n 次迭代后内存内需要存储的点数。

样例 #1

样例输入 #1

1

样例输出 #1

9

样例 #2

样例输入 #2

2

样例输出 #2

25

样例 #3

样例输入 #3

5

样例输出 #3

1089

提示

【数据范围】

对于所有数据, 1 ⩽ n ⩽ 15 1\leqslant n\leqslant 15 1n15

【题目来源】

本题来源自 COCI 2009-2010 CONTEST 4 T2 PLANINA,按照原题数据配置,满分 50 50 50 分。

由 Eason_AC 翻译整理提供。

代码如下

#include
#include
#include
#include 


int main()
{
	int n;
	scanf("%d",&n);
	
	n = pow(2,n) + 1;
	printf("%d",n*n);
	return 0;	
} 

你可能感兴趣的:(洛谷,C语言学习,c语言)