1 条题解

  • 0
    @ 2025-8-24 22:04:57

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 冬瓜皮
    **

    搬运于2025-08-24 22:04:57,当前版本为作者最后更新于2018-09-24 16:06:41,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    蒟蒻第一次发题解,有点小紧张。

    本题~~题设简洁,解法优雅,思路清新,数据怡人,~~是一道水题

    只要把该考虑的情况考虑清楚,就可以AC,代码实现难度比较低

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int l,q;    //题意
    int ans;
    char a[2002][2002]; //表示矩阵
    int cross(int x,int y){ //计算横向
        int length=1;
        if(x==1||x==l)  return 1;   //在边界退出
        for(int i=1;;i++){
            if(x-i==0||x+i==l+1)    return length;  //到边界退出
            else if(a[x-i][y]!=a[x+i][y])   return length;  //不相等退出
            else length+=2; //相等继续
        }
    }
    int down(int x,int y){  //计算纵向,同理
        int length=1;
        if(y==1||y==l)  return 1;
        for(int i=1;;i++){
            if(y-i==0||y+i==l+1)    return length;
            else if(a[x][y-i]!=a[x][y+i])   return length;
            else length+=2;
        }
    }
    int MAXN(int a,int b){	//比较函数
        if(a>=b)    return a;
        else return b;
    }
    int main(){
        cin>>l>>q;
        for(int i=1;i<=l;i++){  //读入
            for(int j=1;j<=l;j++){
                cin >> a[i][j]; 
            }
        }
        for(int i=0;i<=q;i++){   //计算
            int x,y;
            cin>>x>>y;
            ans=MAXN(cross(x,y),down(x,y));
            cout<<ans;
            if(i!=q)cout<<endl;
        }
        return 0;
    }
    

    465ms/4548kb

    对了,我保证你复制粘贴这个题解会爆零。

    我在main里耍了一点点小小的手段,但是只要你认真通读代码一定能知道该怎么改动

    花絮:这是我第一次提交时候的结果:谁持彩练当空舞?

    然后发到讨论版,神犇 @Sai_0511 在一番测试后指出了我的问题:

    第一次我交的时候上文的cin>>a[i][j]用的是getchar().

    这位大佬回复了我提的每一个问题,在此表示致谢,NOIP2018一起Score+=600吧!

    • 1

    信息

    ID
    3899
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者