1 条题解

  • 0
    @ 2025-8-24 22:32:50

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar yydfj
    不要打代码了,去玩明日方舟好不好

    搬运于2025-08-24 22:32:50,当前版本为作者最后更新于2021-08-24 17:26:41,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    这是本蒟蒻第十一次写的题解,如有错误点请好心指出!

    问题简述

    这道题我们可以换另一种思路去看待它,就容易理解了:

    NN 个数和一个数 XX,每个数附有三种值分别为 P1,P2,P3P_1,P_2,P_3,若 P1P2|P_1-P_2| 大于 XX,则取 P3P_3 为值,否则取 P1P_1P2P_2 之间的最大值,求这 NN 个数的值的和。

    解法综述

    根据问题简述模拟即可。对 NN 个数的取值进行操作,读入两个数 P1P_1P2P_2,若发现 P1P_1P2P_2 之间的差不大于 XX,则用 ansans 累加它们之间的最大值,否则读入一个数 P3P_3 并用 ansans 累加这个数,最后输出 ansans 即可。

    代码描述

    #include<cstdio>
    #define max(a,b) (a>b?a:b)//取两个数之间最大值
    #define abs(a,b) (a>b?a-b:b-a)//取两个数之间的绝对值
    int N,X,P1,P2,P3,ans;
    int main()
    {
    	scanf("%d%d",&N,&X);
    	while(N--)//对N个数的取值进行操作
    	{
    		scanf("%d%d",&P1,&P2);//读入两个数P1和P2
    		if(abs(P1,P2)<=X) ans+=max(P1,P2);//若发现P1与P2之间的差不大于X,则用ans累加它们之间的最大值
    		else//否则
    		{
    			scanf("%d",&P3);//读入一个数P3
    			ans+=P3;//用ans累加这个数
    		}
    	}
    	printf("%d",ans);//最后输出ans即可
    	return 0;
    }
    
    • 1

    信息

    ID
    6753
    时间
    1000ms
    内存
    64MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者