视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
CodeforcesRound#259(Div.2)
2020-11-09 08:31:53 责编:小采
文档


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

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

下载本文
显示全文
专题