洛谷的评测系统是不是有“毒“啊

P1303 A*B Problem

LDlornd @ 2017-10-29 20:49:45

0分代码

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN=5000;
int a[MAXN],b[MAXN],ans[MAXN];
int main()
{
    memset(ans,0,sizeof(ans));
    int p1=0,p2=0;
    char c;
    bool flag=true;
    while(scanf("%c",&c)!=EOF)
        if(c=='\n') break;
        else a[++p1]=c-'0';
    while(scanf("%c",&c)!=EOF)
        if(c=='\n') break;
        else b[++p2]=c-'0';
    for(int i=1;i<=p1/2;++i) swap(a[i],a[p1-i+1]);
    for(int i=1;i<=p2/2;++i) swap(b[i],b[p2-i+1]);
    if(p1<p2)
    {
        for(int i=1;i<=p2;++i)
            swap(a[i],b[i]);
        swap(p1,p2);
    }
    for(int i=1;i<=p1;++i)
    {
        for(int j=1;j<=p2;++j)
        {
            ans[i+j-1]+=a[i]*b[j];
            ans[i+j]+=ans[i+j-1]/10;
            ans[i+j-1]%=10;
        }
    }
    for(int i=p1+p2;i>=1;--i)
        if(ans[i]!=0||flag==false) {printf("%d",ans[i]);flag=false;}
    if(flag) printf("0");
    return 0;
}

————————分割线———————— AC代码

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN=5000;
char s[MAXN];
int a[MAXN],b[MAXN],ans[MAXN];
int main()
{
    memset(ans,0,sizeof(ans));
    int p1,p2;
    bool flag=true;
    scanf("%s",s);
    p1=strlen(s);
    for(int i=p1;i>=1;--i) a[i]=s[p1-i]-'0';
    scanf("%s",s);
    p2=strlen(s);
    for(int i=p2;i>=1;--i) b[i]=s[p2-i]-'0';
    if(p1<p2)
    {
        for(int i=1;i<=p2;++i)
            swap(a[i],b[i]);
        swap(p1,p2);
    }
    for(int i=1;i<=p1;++i)
    {
        for(int j=1;j<=p2;++j)
        {
            ans[i+j-1]+=a[i]*b[j];
            ans[i+j]+=ans[i+j-1]/10;
            ans[i+j-1]%=10;
        }
    }
    for(int i=p1+p2;i>=1;--i)
        if(ans[i]!=0||flag==false) {printf("%d",ans[i]);flag=false;}
    if(flag) printf("0");
    return 0;
}

0分和AC只在读入的区别,有哪位大神可以告诉我这是为什么? 0分代码在本地运行结果和AC代码是一样的。。。。

无法理解。。。


by 1124828077ccj @ 2017-10-29 21:07:44

@cn:苏卿念 不,是scanf("%s",s)不能加地址符,l=strlen(s),那么字符串从0~l-1


by Arcturus1350 @ 2017-10-29 21:07:59

@computerlover 这样的话应该写c==‘\r’吧。。。(自我感觉。。。)


by Arcturus1350 @ 2017-10-29 21:09:18

@2016陈常杰 哦。。。。。明白了。谢谢


by 青衫白叙 @ 2017-10-29 21:10:06

我还以为 \r\n 是两个字符、、


by Arcturus1350 @ 2017-10-29 21:13:41

好像就是两个吧 @青衫白叙


by 青衫白叙 @ 2017-10-29 21:14:14

是啊。。可是有人以为是一个啊。。


by Arcturus1350 @ 2017-10-29 21:16:36

刚才想错了。

应该是

var
    if(c=='\r')
{
char q1;q1=getchar();//要把\n空过去。这样好像就能A了
}

by LDlornd @ 2017-10-29 21:35:01

@cn:苏卿念 是的,写成这样就可以AC了

while(scanf("%c",&c)!=EOF)

    if(c=='\r') {scanf("\n");break;}

else a[++p1]=c-'0';


by LDlornd @ 2017-10-29 21:35:53

这排版绝对有毒。。。


by Arcturus1350 @ 2017-10-29 21:37:40

@computerlover 没错没错233.....


上一页 | 下一页