今天本来想放一张图片在这个文档上面的,但是这个网站提示我Upload文件夹没有写入的权限,暂且留到后面弥补吧。
目前我们队伍的当前区域排名是60名,成绩为50.42分,看着还不错的样子,实际上我们一点点算法都没有用,完全是用测试用例上交的代码。哈哈,永远得出的是最快的,但求出的方案永远是费用最高的(直连算法)。昨天花了一个下午的时间写的东西在answer_demo里面都有,而且代码写的非常漂亮,也极为高效。
下面简单讲一下今天的收获吧。主要以deploy.cpp为主讲一下。
第一点就是人家读取参数简单高效,直接一个个的读取字符(而我之前的做法是把字符串重新转成输入流,这道行真的是相差十万八千里了,明天有空的话跟大家献个丑)。举例如下:
char *c;
int spaceCount = 0;
c = topo[0];
while (*c != '\0' && *c != '\n' && *c != '\r')
{
if (*c == ' ')
{
c++;
spaceCount++;
continue;
}
if (spaceCount == 2)
{
consumerNum = *c - '0' + consumerNum * 10;
}
c++;
}
用spaceCount来区分一行的不同参数。先是读进来一个字符,判断它是不是奇怪的字符(比如\n \r \0),如果不是的话,就进入循环。
循环里面做两步选择
Step1:先判断它是不是空格,是空格的话那么c++,然后spaceCount++,continue一下,接着读取新的字符。
Step2:如果读取的字符不是空,看spaceCount是几,是0的话那么读取进来的就是第一个参数,如果是1的话读取进来的就是第二个参数,以此类推。以为读取进来的都是数字,先是把字符串转为数字(一步就好:'c'-'0'),如果再读取进来一个字符怎么办呢,新读取进来的字符肯定是权重比之前的要小,那么就把之前的保存的数乘以10,再加上新字符所对应的那个数字,这就好了(对不对,非常完美)。
第二点,它的输出也十分的棒,sprintf格式化输出,话说我怎么就没有想起来呢,肯定是C#编多了的缘故(我当时及其愚蠢的用了网上的一个函数int2string,真是打脸打到飞起啊)。 sprintf(a, "%d\n\n",consumerNum);怎么样,简单易懂。把格式化好的字符串直接赋值给string,res += a。
写到这里,看来以后还是得多学习啊。