1 条题解

  • 0
    @ 2025-8-24 22:10:37

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ix35
    垒球

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

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

    以下是正文


    一道很搞笑的结论题。

    唯一一篇题解中有提到图论的部分,但是我刚看到这玩意真不觉得是个图论。首先先拆式子吧。

    P=2019201997P=2019201997,则x<yx<y产生的代价为((P84)x+(P48)y)modP((P-84)x+(P-48)y)\mod P,这个大数看着有点心烦,想办法把它拆去:

    ((P84)x+(P48)y)modP=((84x48y)modP+P)modP((P-84)x+(P-48)y)\mod P=((-84x-48y)\mod P+P)\mod P

    我们发现由于N7500N\leq 7500,因此84x48y-84x-48y远远不到P-P,所以内层的取模时可以去掉的,另外由于它总是个负数,因此加上P后不必再取模,外层的取模实际上也是可以去掉的,所以代价为:

    84x48y+P-84x-48y+P

    下面让它的最小值取最大值。有一个很显然的结论,最小值一定由NN和另一个数产生,假设不是这样,那么设最小值由r<sr<s组成,那么其中必有一个数与NN不在一组(否则r,sr,s一组矛盾),于是将其中一个换成NN得到结果更小。

    那么当NN确定时,这个式子的值尽量大,其实就是xx尽量小,由于KK组都非空,所以我们让1...K11...K-1各自单独一组,最后K...NK...N一组,那么(K1,N)(K-1,N)可以组成最大的最小值,即:

    84(K1)48N+P-84(K-1)-48N+P

    于是就...

    注意这玩意看上去大,实际上超小,不会超int,所以随便过。

    #include <bits/stdc++.h>
    using namespace std;
    int n,k;
    int main () {
    	scanf("%d%d",&n,&k);
    	printf("%d\n",-12*(7*(k-1)+4*n)+2019201997);
    	return 0;
    }
    
    • 1

    信息

    ID
    4403
    时间
    2000ms
    内存
    512MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者