今天的题目做得不太顺,又是卡在了第一题,做CF以来,我发现有的题目不是很难,但是我总是找不到合适的方法,会把问题想复杂或者是分类不对,总之看到比较简洁的代码的时候就会有一种自己的写的东西完全拎不清这道题的感觉,怪我接触ACM以来,就把它当成是一个高难度的计算机竞赛,一直想的是怎么能快点学会一些自己以前不会的算法,或者是没有接触过的东西,看到这种不是很难的题目就要么忽视不做,要么通过自己的笨办法(一般就是不断地“凑”)解出来之后就不管了,反而把精力投入到那种自己不会做的题目中,导致很多东西本来应该固化了的,我还是每次都当做一个新的东西来看待,投入大量的时间和精力,解出来还好,一旦卡死,整个人都会心态崩盘。
现在有了这个认识,而且CF在比赛结束之后是可以看到大佬们的代码的,这样就可以多多学习别人清晰简洁的代码,希望可以有所提高~
☝以后题目都用截图啦,看着清晰一些,哈哈
这个题目的意思就是给一串长度已知的字符串,其中黑白相间,需要统计出有几块黑色的,且每块黑色的有多少个,黑色是关键,尽量就不要考虑白色。
#include<iostream>
using namespace std;
#include<algorithm>
char color[105];
int black[55];
int main()
{
int n;
while (cin >> n)
{
memset(black, 0, sizeof(black));
int i;
for (i = 0; i < n; i++)
cin >> color[i];
int cnt = 0;
i = 0;
for (i = 0; i < n; i++)
{
while (color[i] == 'B'&&i < n)
{
black[cnt]++;
i++;
if (color[i]!= 'B')
//这实际上不合适的,因为如果是4,bbbb这个样例,考的是第四个元素不是b才使得cnt能够+1,如果改成color【i】==‘W’,这个方法就不对了。
{
cnt++;
break;
}
}
}
if (cnt)
{
cout << cnt << endl;
for (i = 0; i < cnt; i++)
cout << black[i] << " ";
cout << endl;
}
else
cout << "0\n";
}
return 0;
}
计算机是一个比较直的东西,有自己的思考方式,这种思维问题应该先走进计算机思考问题的方式——简单粗暴,不要牵扯太多!
再贴一个更为严格的代码。
#include<iostream>
using namespace std;
#include<algorithm>
char color[105];
int black[55];
int main()
{
int n;
while (cin >> n)
{
memset(black, 0, sizeof(black));
int i;
for (i = 0; i < n; i++)
cin >> color[i];
int cnt = 0;
i = 0;
for (i = 0; i < n; i++)
{
int tot = 0;
while (color[i] == 'B')
{
i++;
tot++;
}
if (tot)
{
black[cnt] = tot;
cnt++;
}
//加了一个变量,感觉整个就机智了好多~
}
if (cnt)
{
cout << cnt << endl;
for (i = 0; i < cnt; i++)
cout << black[i] << " ";
cout << endl;
}
else
cout << "0\n";
}
return 0;
}