当前位置:Gxlcms > mysql > CodeforcesRound#259(Div.2)

CodeforcesRound#259(Div.2)

时间:2021-07-01 10:21:17 帮助过:23人阅读

Codeforces Round #259 (Div. 2)---2014.08.01---A、B。。。下次争取做到C 2014.08.01、2014.08.03、2014.08.04 Codeforces的账号是名字的拼音,记一笔。 嗯这是我第一次参加codeforces的线上赛,呵呵,因为UTC的15:30是大半夜,果然第二天感觉自己的脑袋很

Codeforces Round #259 (Div. 2)---2014.08.01---A、B。。。下次争取做到C

2014.08.01、2014.08.03、2014.08.04

Codeforces的账号是名字的拼音,记一笔。

嗯这是我第一次参加codeforces的线上赛,呵呵,因为UTC的15:30是大半夜,果然第二天感觉自己的脑袋很沉很沉。不过现在觉得参加个什么都是很自然的事,不像大一的时候各种犹豫,还不是因为所有为了不肯努力的敷衍都是借口。。。。

A. Little Pony and Crystal Mine

题目链接

题意:很清晰,给出一个奇数数字,打印出题目要求的那种菱形。这不是学语法的时候的例题吗,具体针对什么语法忘了,然后再找出相应的位置数字方面的规律就好。。。。。我竟然一个小时才过。

细节+代码:

#include
int main(){
	int n,i,j;
	scanf("%d",&n);
	for(i = 0;i<=n/2;i++){ //打印正三角部分。
		for(j = 1;j<=n/2-i;j++) //每行"D"之前的“*”
			printf("*");
		for(j = 1;j<=i*2+1;j++) //每行的“D”
			printf("D");
		for(j = 1;j<=n/2-i;j++) //每行"D"之后的“*”
			printf("*");
		printf("\n");
	}
	for(i = n/2+1;i<=n-1;i++){ //同理打印倒三角部分
		for(j = 1;j<=i-n/2;j++)
			printf("*");
		for(j = 1;j<=n-2*(i-(n/2));j++)
			printf("D");
		for(j = 1;j<=i-n/2;j++)
			printf("*");
		printf("\n");
	}

	return 0;
}

B. Little Pony and Sort by Shift

题目链接

题意:给出一串数字,数字的数目也给出,对于这串数字,只能做一种移动,就是把最尾部的数字放到最前面,问这串数字能不能经过这样的移动,变成一串不递减(即以相等或递增顺序排列的数字串),如果可以,那最少要经过几次移动。

思路:我是先写一串不递减的数字串,然后不断地把最前面的放到最后面,就是逆着题意倒推看看怎样的数字串可以通过题意的移动得到不递减的数字串,总结需要移动的次数。可能出现的情况是,不论这个数串的最大值出现在什么位置,这个位置之前的数字和之后的数字都分别是不递减的,这个位置后的数字的最大值必须小于等于这个位置前的数字的最小值,满足以上条件才可以通过移动变成不递减的一串,这里包括了这一串数字都是相同的这种情况。

好吧,这道题目是比赛完才A的,比赛的时候读错题意,以为有几个数字,就是从1到几,其实对数字的数值没限定,也有可能是相同的数字。其实当测试数据错的时候,可以看到错误的那组测试数据的,我不知道这个结果还question,竟然得到了回答,cf真不错!

还有些细节标在代码里:

#include
int main(){
	int i,n,loc,a[110000],max,frontmin,behindmax,f,j,locfirst;
	scanf("%d",&n); //注意a数组的开的大小,,呵呵
	max = 0;

	for(i = 0;i<=n-1;i++){
		scanf("%d",&a[i]);
		if(a[i]>max)
			max = a[i];
	}

	f = 0;
	for(i = 0;i<=n-1;i++){
		if(a[i]==max&&f==0){ //如果最大值在开头出现,那么也可以出现在结尾处
			f = 1;
			locfirst = i+1;
			loc = i+1;
		}
		if(a[i]0&&i>0&&a[i]==max&&a[i-1]==max)
			loc = i+1;
	}
	for(i = 0;i<=n-1;i++){
		if(i!=0&&a[i]behindmax)
			behindmax = a[i];
	}
	if(behindmax>frontmin){
		printf("-1\n");
		return 0;
	}
	printf("%d\n",n-loc);
	return 0;
}

下次再参加,把有道的屏幕划词准备好。。。明天看点别的,。。

人气教程排行