美文网首页
2018-11-18-玄学

2018-11-18-玄学

作者: termanary | 来源:发表于2018-11-18 13:22 被阅读0次

    传送门:CodeForce
    或者:VOJ
    以下python代码是AC的:

    #!/usr/bin/python3
    mod = 2**64
    while True :
        try :
            abcn = input().split()
            a = int(abcn[0])
            b = int(abcn[1])
            c = int(abcn[2])
            n = int(abcn[3])
            leng = 1
            if a==b and b==c :
                leng = 6
            elif a==b or b==c or c==a :
                leng = 2
            ans = 0
            if n%2 == 0 :
                ans = ( n * ( (n//2-1)*(n//2+2) + (n-2) ) // leng )
            else :
                ans = ( n * (n//2) * (n//2+1) // leng )
            print(ans%mod)
        except EOFError:
            break
    

    以下C++代码是WA on test 9:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        unsigned long long a ,b ,c ,n;
        cin>>a>>b>>c>>n;
        unsigned long long len=1;
        if(a==b&&b==c)
        {
            len=6;
        }
        else if(a==b||b==c||c==a)
        {
            len=2;
        }
        unsigned long long ans=0;
        if(n%2==0)
        {
            ans=(n*((n/2-1)*(n/2+2)+(n-2))/len);
        }
        else
            ans=(n*(n/2)*(n/2+1)/len);
        cout<<ans<<endl;
    }
    

    不科学啊,python代码是我根据C++代码改写而来,结果python过了,C++挂了。
    我考虑过unsigned long long 的字节长度问题,输入类型问题,编译器问题,溢出问题,比较的时候的类型不同问题。还是不知道为什么啊。明明是一样的代码啊!
    本机上8000组随机数,一通胡改,都没找到原因。


    WA.png

    上次写完博客一天之后就破案了,可是现在才来更新,我也太懒了。
    经过与AC的C++代码的人肉diff,终于找到了原因。
    首先python代码AC,C++代码WA,只能说明算法是正确的,代码错误出现在书写上。
    python整数可以使用无限长度,C++整型却有固定长度。问题可能出现在这里。

    ans=(n*((n/2-1)*(n/2+2)+(n-2))/len);
    ans=(n*(n/2)*(n/2+1)/len);
    

    事实上,问题出现在上面两行。原因各位看出来了吗,反正当时在场上的时候我是没有看出来的,回来了大眼瞪小眼的也没有看出来。回想起队友之一当时提到乘法逆元,我当时觉得不是,另一个队友也没有反应,没有支持。他自己也不确定,不坚持。确实,曾经有过他坚持提交最后AC的前例,只能说在场上的时候,自己不确定的就要征询队友意见,自己确信的就一定要坚持,这应该是一个队员应该做的吧。

    好了,说了这么多,原因是:原本题目说对2**64取模,用unsign long long 是没有错的,错就错在模k系统的除法是需要使用乘法逆元的,当然,也可以使用很多个if-else判断提前相除。

    因为这题错失ec-final。。。哭。。。

    相关文章

      网友评论

          本文标题:2018-11-18-玄学

          本文链接:https://www.haomeiwen.com/subject/fsqgfqtx.html