1 条题解

  • 0
    @ 2025-8-24 21:16:07

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar RyanLi
    跟着光,靠近光,成为光,散发光。

    搬运于2025-08-24 21:16:06,当前版本为作者最后更新于2024-03-10 21:28:28,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    Source & Knowledge

    2024 年 3 月语言月赛,由洛谷网校入门计划/基础计划提供。

    题目大意

    给定一些多选题的答案和作答,加入你从第 xx 题开始作答,判断你可以拿到多少分。

    题目分析

    首先,我们要考虑如何计算得分。

    先判断没有作答的情况。

    考虑将作答设为 11,答案设为 1-1。将两个数组相加,那么 00 表示这个位置是正确的。

    一个完全正确的答案数组一定全部为 00,如果数组存在多余的 1-1,那么说明多涂。否则是部分正确的。

    我们可以写出代码:

    int check(int a[4],int b[4]){
        int c[4],sum=0;
        for(int i=0;i<4;i++)sum+=b[i];
        if(sum==0)return 0;
        for(int i=0;i<4;i++)c[i]=a[i]+b[i];
        for(int i=0;i<4;i++)
            if(c[i]==-1)return 0;
        for(int i=0;i<4;i++)
            if(c[i]==1)return 3;
        return 6;
    }
    

    然后我们枚举每个起点,按照题意模拟判断即可。

    std::cin>>n;
    for(int i=0;i<n;i++)
        for(int j=0;j<4;j++)std::cin>>a[i][j];
    for(int i=0;i<n;i++)
        for(int j=0;j<4;j++)std::cin>>b[i][j],b[i][j]*=-1;
    for(int i=0;i<n;i++){
        int ans=0;
        for(int j=0;j<n;j++)
            ans+=check(a[(i+j)%n],b[j]);
        std::cout<<ans<<" \n"[i==n-1];
    }
    

    视频讲解

    完整代码见视频题解

    • 1

    信息

    ID
    9835
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者