回 帖 发 新 帖 刷新版面

主题:第54次变成比赛结果

姓名    题目true通过    题目2通过    题目1用时    题目2用时
iAkiak    TRUE    TRUE    0    16
arfi    TRUE    0    6750    outtime
System64    TRUE    0    13188    outtime
shen08343    TRUE    TRUE    15484    813
poemsea    TRUE    0    16047    outtime
小黑骑DK    TRUE    TRUE    31047    0
wangfangbob    0    TRUE    outtime    0
SeZhang    0    TRUE    outtime    15
goal00001111    0    TRUE    outtime    891
latalata    0    TRUE    outtime    13656
xylgg    TRUE    0    outtime    outtime
leejqy_1    0    0    outtime    outtime
maths_dxj    TRUE    0    outtime    outtime
leejqy_2    0    0    outtime    outtime
pysn    0    0    outtime    outtime
surgeonlao    0    0    outtime    outtime
wuchengwei    0    0    outtime    outtime



冠军就是 iAkiak 了,不用记小分了


[size=4][size=3][size=2][color=FF0000]致歉声明:因为本人的偷懒行为,造成了不良影响,特此道歉,请大家谅解[/color][/size][/size][/size]比赛主要比的是算法,iAkiak第一题算法最优(程序出了点问题),第二题算法仅次于小黑骑DK wangfangbob,下次比赛还请iAkiak出题。

回复列表 (共41个回复)

沙发

共有16人参加比赛,leejqy提交了两份代码,分别记为 leejqy_1,leejqy_2

编译未通过的有两个

wangfangbob  第一题 

    <math.h>函数库中有下面两个函数
    log是基于自然对数e的   
    log10是基于底数10的   
        
    没有log2函数
    要做底数为2的:   
        
    log2(x)=log(x)/log(2);       


pysn 飘雨少年 第一题
    代码未写在函数中
    
以上代码没有测试    

运行期错误:
SeZhang::solve 变量 j没有赋初值  在j声明处改为 j=0;数组越界 没有测试
surgeonlao::solve a[100][12] a[i-1][n1++]=n%2;  数组越界
maths_dxj::solve 没有足够内存分配 
        int *store = new int[m+1];//用于存储可能满足条件的数
        store[0] = 1;
        int *cnt = new int[m+1];//用于记录上述存储的数种1、0个数差
        int *bb = new int[m+1];
xylgg::Q       数组越界

以上代码没有测试

其他:
xylgg::solve 函数中有 cout 速度很慢 未测试速度

测试数据
m=90000000;
k=100000;

只测一次,发现不用测下去了。

板凳

C99里是有log2的

3 楼

[quote]
pysn 飘雨少年 第一题
    代码未写在函数中[/quote]
晕倒,忙着提交,少粘贴了函数名了。
不知道还能不能再给测试一下,就想知道效率怎么样。

[code=c]
namespace pysn
{
   int solve(int m)
  { 
    int count=0;
    for(int i=1;i<m+1;i++)
    {
            int numOfB1=0,numOfB0=0;
            int one=1,forward0=0;
            do
            {
                if(one&i) 
                {
                   numOfB1++;
                   forward0=0;
                }
                else 
                {
                   numOfB0++;
                   forward0++;
                }
                one<<=1;               
            }while(one);
            if(numOfB0-forward0>numOfB1) count++;
    }
    return count;
  }
}
[/code]

4 楼

至少devc++里的math.h里是有log2的,C99标准里是有log2的
要是楼主的编译器实在没有的话,就用
for ( bound = 0, temp = m; temp > 0; ++bound, temp >>= 1 )
{}
替换语句bound = ( int )log2 ( m ) + 1;
不知道还能不能再给测试一下

5 楼

对呀,以后出题的最好给出编译环境~

6 楼

不是吧- -

第二题的logn的还没看懂呢,wangfangbob,小黑骑DK,能不能讲讲原理?

7 楼

还有,只测一次是不够的。

8 楼

好厉害,iAkiak的效率那么高

9 楼


iAkiak:
我测试你的程序怎么
        for ( i = 1; i < n; ++i )
        {
            iAkiak :: solve( i );
        }
老出问题

10 楼

yxs0001:我的第一题测试的速度好像挺快的,怎么会超时呢,可以看看测试吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册