回 帖 发 新 帖 刷新版面

主题:第58次编程比赛初测 & 最终结果

[color=0000FF]初测结果:[/color]

我直接复制原作者的代码测试的,结果发现这样的话没有一份代码能通过测试
绝大多数代码是WA,少数代码是CE,TLE和RE
现在开始进行放宽限制的测试

如果你觉得你的代码需要更正的,请跟帖,跟帖更正限时一天之内
更正的代码和原来的代码只能相差最多两行并且在20字节以内,
否则更正代码视作无效


[color=0000FF]最终结果:[/color]
本题测试数据一共四个Test,能全部通过前四组的代码的作者有:
flyee (-2)
AntiMicrosoft (-1)
从速度上来说,这两份代码都很好。
从代码结构和算法上来看,两人用的思路也差不多。

所以我决定flyee和AntiMicrosoft两人同时胜出作为本次比赛的冠军

回复列表 (共42个回复)

31 楼

[quote][quote]第二份应该就可以过的:估计是因为你输入部分用的cin>>str1>>str2才超时的[/quote]
为什么输入的部分用 cin>>str1>>str2 就会超时呢?
谁能解释一下啊~~~~[/quote]

C++的IO效率太低 跟scanf比  有10倍以上的差距

32 楼

谢~~

33 楼

我是觉得最初100ms的时间太紧了,给选手预留的发挥空间太小了,没有必要这样。尤其是因为程序也是评判标准之一,时间不是唯一的因素,应该是要放宽些的。

34 楼

[quote]我是觉得最初100ms的时间太紧了,给选手预留的发挥空间太小了,没有必要这样。尤其是因为程序也是评判标准之一,时间不是唯一的因素,应该是要放宽些的。[/quote]
不是的,对于这个题,似乎没什么太多算法可以选择,
方法选得不对的话连结果也是WA。
我给出的代码是O(m+n+min(m,n)),加上数据量不大,100ms都足够了。
另外一种写法是的复杂度是O(m*n),10000*10000的话时间会相差很远,放1000ms也TLE。
结果正确并且算法复杂度不是O(m*n)的,也就只有那两份代码了

35 楼

[quote][quote]我是觉得最初100ms的时间太紧了,给选手预留的发挥空间太小了,没有必要这样。尤其是因为程序也是评判标准之一,时间不是唯一的因素,应该是要放宽些的。[/quote]
不是的,对于这个题,似乎没什么太多算法可以选择,
方法选得不对的话连结果也是WA。
我给出的代码是O(m+n+min(m,n)),加上数据量不大,100ms都足够了。
另外一种写法是的复杂度是O(m*n),10000*10000的话时间会相差很远,放1000ms也TLE。
结果正确并且算法复杂度不是O(m*n)的,也就只有那两份代码了[/quote]

我当然知道O(n+m+|Σ|)的算法,不过100ms很容易让钟情cin/cout的程序死掉,虽然这次比赛结果不受这个影响,不过作为比赛的预期是应该预留一些空间的

36 楼

那倒不会,cin/cout一样不会超,测试量真的很小,单个测试文件的测试数据的也不超过20个case,cin/cout也不会挂

37 楼

/*帮我看看呀,用VC6的*/
#include <stdio.h>
#define  MAX_CHAR_LEN   10001
int main()
{
    char str1[MAX_CHAR_LEN],str2[MAX_CHAR_LEN];
    while(scanf("%s %s",&str1, &str2) != EOF)
    {
        //这里写你的计算代码
        int a=0,b=0,c=0,i=0,j=0;
        while(*(str1+i)!='\0') 
        {
            j=0;
            while(*(str2+j)!='\0')
            {
                if(*(str1+i)==*(str2+i))
                {a++;break;}
                if(i!=j&&*(str1+i)==*(str2+j)) 
                {b++;break;}
                j++;
            }
                i++;
        }
        i=0,j=0;
        while(*(str2+i)!='\0') 
        {
            j=0;
            while(*(str1+j)!='\0')
            {
                if(*(str2+i)==*(str1+i))
                {break;}
                if(i!=j&&*(str2+i)==*(str1+j)) 
                {c++;break;}
                j++;
            }
                i++;
        }
        printf("%dA%dB\n",a,b>c?c:b);
    }
    return 0;
}

38 楼

楼上的代码测试结果是WA,
如果你还想提交代码测试一下的,欢迎到[url]http://yzfy.org[/url]

39 楼

[code=c]
#include <stdio.h>
#include <string.h>
#define MAX 1001
int main()
{
    int i,j,na=0,nb=0,len;
    char str1[MAX],str2[MAX];
    printf("please input the two strings:\n");
    scanf("%s",str1);
    scanf("%s",str2);
    len=strlen(str1);
    for(i=0,j=0;i<len;i++,j++)
       if(str1[i]==str2[j])
          na++;
       for(j=0;j<len;j++)
             for(i=0;i<len;i++)
                if((str2[j]==str1[i])&&(i!=j))
                   nb++;
                printf("the result is %dA%dB\n",na,nb);
                   return 0;
}                   
[/code]

            这段代码怎样啊?还有什么缺点。       [em1]
            

40 楼

你这段代码的输出结果错误

我来回复

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