CSU_BMW正式组队纪念赛出题+部分解题报告

忙的要死了,要给三月月赛调试服务器,出题,还要筹办下个月的校赛,还有考研复试,还有毕业设计……这俩孩子得知考研成绩公布,咱的分数应该算过了初试了,竟然想到来办一场纪念赛,倒是颇为感动。。。

 

事情太多,只出了两个水题,水了两个的朋友别忘了感谢我~~

A:搞两个双端队列,一个是最大数单调队列,一个是最小数单调队列,一遍扫过去,随时把答案更新为两个队列较短那个(当较短那个比答案长的时候)

B:还好测试的时候写了个n^2logn的代码水了过去,所以加强了数据。对X坐标排序,枚举Y坐标的低端,n^2扫描。

C:把这串数字的过程倒过来看,双端DP。

D:这题就是坑爹的,去看斌仔的题解吧。

EFG没看,参考M-O和Burn-E的题解。

H:printf的双引号里这个东西,就是个字符串常量,可以用一个定义好的字符串变量代替,那么~~

char buf[100] = "%d";printf(buf, 1);好玩吧。

 1 while(gets(buf))
 2 {
 3     for(i = 0; buf[i] != '"'; ++ i);
 4     for(j = strlen(buf); buf[j] != '"'; -- j);
 5     strncpy(prin, buf + i + 1, j - i - 1);
 6     prin[j - i - 1] = 0;
 7     for(; buf[j] != ','; ++ j);
 8     sscanf(buf + j + 1, "%d,%d,%d", &a, &b, &c);
 9     printf(prin, a, b, c);
10     printf("\n");
11 }

不过直接交上面代码会WA的,有什么和思路无关的trick就不讲了~~~

 

I:统计三种字母的个数,输出个数最少的那个就可以了。

 1 while(gets(buf))
 2 {
 3     b = m = w = 0;
 4     for(i = 0; buf[i]; ++ i)
 5     {
 6         b += buf[i] == 'b' || buf[i] == 'B';
 7         m += buf[i] == 'm' || buf[i] == 'M';
 8         w += buf[i] == 'w' || buf[i] == 'W';
 9     }
10     printf("%d\n", min(b, m, w));
11 }

 

其他题详细解题报告:

Staginner解题报告

Swimming解题报告

题目链接

posted @ 2012-08-27 20:37  CSGrandeur  阅读(295)  评论(0编辑  收藏  举报