• cf 1305 E. Kuroni and the Score Distribution


    题目链接:http://codeforces.com/contest/1305/problem/E

    题意:给你一个n和m,要你构造一个长度为n的序列,且序列满足a[i]<a[i+1],而且必须要有m组a[i]+a[j]=a[k](i<j<k),如果不存在就输出-1.

    思路:如果m=0,那就输出n个奇数,否则序列可以从1开始构造,那对于i,他的贡献度为(i-1)/2。如果n个数的总贡献度小于m,那就输出-1,否则就找到第一个x,使前x个数的总贡献度大于等于m。然后输出1到x-1,现在还多了sum[x]-m的贡献度,当每次x+=2时,贡献度就会减1,所以当x加到x+2*(sum[x]-m)就刚好凑齐贡献度,然后剩下的数都比前一个数大x+2*(sum[x]-m)+1就可以了。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<string>
    #include<iostream>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<queue>
    using namespace std;
    int a[5005];
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        if(m==0)
        {
            for(int i=1;i<=n;i++)
                printf("%d ",i*2-1);
            printf("
    ");
            return 0;
        }
        int p=-1;
        for(int i=1;i<=n;i++)
        {
            a[i]=a[i-1]+(i-1)/2;
            if(a[i]>=m)
            {
                p=i;
                break;
            }
        }
        if(p==-1)
        {
            printf("-1
    ");
            return 0;
        }
        int x=p+2*(a[p]-m);
        for(int i=1;i<p;i++)
            printf("%d ",i);
        printf("%d ",x);
        int y=x+1;
        for(int i=p+1;i<=n;i++)
        {
            x+=y;
            printf("%d ",x);
        }
        printf("
    ");
    }
  • 相关阅读:
    MVP 实战
    Model 层
    Presenter 层
    View 层
    DB数据库的基本操作
    MongoDB数据库基本操作
    转换函数
    字符串函数
    空值处理
    Java中使用Redis的几种数据类型总结
  • 原文地址:https://www.cnblogs.com/zcb123456789/p/12411921.html
Copyright © 2020-2023  润新知