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 }
其他题详细解题报告: