• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Codeforces Round #259 (Div. 2)

mysql 搞代码 4年前 (2022-01-09) 15次浏览 已收录 0个评论

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)—2本文来源gao($daima.com搞@代@#码(网014.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

题目链接

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

细节+代码:

#includeint 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真不错!

还有些细节标在代码里:

#includeint main(){	int i,n,loc,a[110000],max,frontmin,behindmax,f,j,locfirst;	scanf("%d",&n); //注意a数组的开的大小,,呵呵	max = 0;	for(i = 0;imax)			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]<max&&f==1)			f = -1;		if(a[i]==max&&f==-1){ //但是不能被其他数字隔断出现在中间,			if(locfirst!=1){				printf("-1\n");				return 0;			}			for(j = i;j0&&i>0&&a[i]==max&&a[i-1]==max)			loc = i+1;	}	for(i = 0;ifrontmin){		printf("-1\n");		return 0;	}	printf("%d\n",n-loc);	return 0;}

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Codeforces Round #259 (Div. 2)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址