题目大意:题目给定两个数n和m(1<=n<=5000,0<=m<=1e9)要求构造一个数列A,A中元素

  1. 大于等于1,小于等于1e9且满足严格递增
  2. 满足ai+aj=ak的(i,j,k)恰好有m个

如果有没有这样的A输出-1。

分析:如果ai和aj确定,那么ak唯一。也可以说任意两个可以决定第三个。

首先可以猜想当A为1到n的连续自然数时这样的三元组最大。(容易用数学归纳法证明。利用下面红字得到的结论,一个一个加。em。。。)

假如前s个数已经确定为1到s的自然数按顺序的排列,当增加第s+1个数时,满足条件的(x,y,s+1)的个数就是满足as+1-y=x<y的y的个数(已知a1到as就是1到s的自然数,所以ax=x,ay=y),即满足 as+1<2*y 的y的个数。由此可以确定as+1对三元组个数的影响

同时也能得到这样的结论:

用数列Sn表示从1到n 的n个自然数按顺序排列而成的数列可以找到所有满足条件的三元组的数量。那么有:Sn+1-Sn=n/2(向下取整)。

可以先用1,2,3。。。来填充数组,超过时按上面红色的规则添加下一个数。

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAX_N=+;
int n,m;
LL a[MAX_N];
int main()
{
int tmp=1e9;
scanf("%d%d",&n,&m);
if(m==){
for(int i=n;i>=;i--) a[i]=tmp,tmp-=;
for(int i=;i<=n;i++) printf("%d ",a[i]);
}
else{
int i;
for(i=;i<=n;i++){
if(m>=(i-)/) a[i]=i,m-=(i-)/;
else break;
}
if(i>n&&m){printf("-1\n");}
else{
int cur;
for(cur=;;cur++) if(a[cur]==) break;
if(m==){
for(int j=n;j>=cur;j--)a[j]=tmp,tmp-=a[cur-]+;
}
else {
a[cur]=a[cur-m]+a[cur-m-];
for(int j=n;j>cur;j--)a[j]=tmp,tmp-=a[cur]+;
}
for(int i=;i<=n;i++) printf("%d ",a[i]);
}
}
}

 欢迎转载和引用

CF 1305E. Kuroni and the Score Distribution的更多相关文章

  1. cf 1305 E. Kuroni and the Score Distribution

    题目传送门:E. Kuroni and the Score Distribution 题目大意:给n和m,输出n个数,这些数里必须要有m对a[i]+a[j]==a[k]  ( i < j < ...

  2. Codeforces 杂题集 2.0

      记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序   1326D2 - Prefix-Suffix Palindrome (Hard version) ...

  3. Linux command line exercises for NGS data processing

    by Umer Zeeshan Ijaz The purpose of this tutorial is to introduce students to the frequently used to ...

  4. Scoring and Modeling—— Underwriting and Loan Approval Process

    https://www.fdic.gov/regulations/examinations/credit_card/ch8.html Types of Scoring FICO Scores    V ...

  5. 2016CVPR论文集

    http://www.cv-foundation.org/openaccess/CVPR2016.py ORAL SESSION Image Captioning and Question Answe ...

  6. win7下使用Taste实现协同过滤算法

    如果要实现Taste算法,必备的条件是: 1) JDK,使用1.6版本.需要说明一下,因为要基于Eclipse构建,所以在设置path的值之前要先定义JAVA_HOME变量. 2) Maven,使用2 ...

  7. CVPR2016 Paper list

    CVPR2016 Paper list ORAL SESSIONImage Captioning and Question Answering Monday, June 27th, 9:00AM - ...

  8. ProbS CF matlab源代码(二分系统)(原创作品,转载注明出处,谢谢!)

    %ProbS clear all;%% 数据读入与预处理 data = load('E:\network_papers\u1.base');test = load('E:\network_papers ...

  9. CF Round#240题解

    第一次参加CF的比赛,MSK19.30,四个小时的时差真心累,第一次CODE到这么夜-- 一开始做了A,C两题,后来做B题的时候我体力和精神集中度就很低了,导致一直WA在4-- 今天起床后再刷B,终于 ...

随机推荐

  1. Linux的iptables菜鸟初学

    什么是iptables? iptables是linux下的命令行工具,操控的是linux的防火墙,这个防火墙叫netfilter.通俗的说应该是用户通过iptables把安全设定设置给netfilte ...

  2. Python与用户相交互

    今日所得 Python中注释的重要性 Python与用户相交互: 1.输入 2.输出 3.格式化输出 Python的基本数据类型:int,float,str,list,dict,bool 运算符 1. ...

  3. redHat更新yum源

    1. 网易镜像仓库查找相关rpm 包并下载 :http://mirrors.163.com/centos/6/os/x86_64/Packages/ wget http://mirrors.163.c ...

  4. 查询AD中被锁定的账号并进行解锁

    1:查询AD中被锁定的账号: Search-ADAccount -LockedOut | export-csv -path c:\aaavvv.csv 2:解除锁定 Search-ADAccount ...

  5. 二:MySQL的操作

    1:创建数据库 create database  bjpowernode ; 2:使用数据库 use bjpowernode; 3:导入数据库文件sql source  然后把SQL文件拖过来就可以了 ...

  6. 使用VSCode调试Javascript的三种方式

    Code Runner 在应用商店中搜索Code Runner插件进行安装. 选中你要执行的Javascript脚本,右键选择Run Code,利用Console.log在下方的输出窗口里可以看到输出 ...

  7. python编程——Class(未完成)

    __new__ __init__ __call__ __del__ if __name__=='__main__' __main__

  8. 【Linux_Shell 脚本编程学习知识点、判断传入参数是否是 整数】

    判断脚本传入的参数是否是整数 常用的几种方法 完整Shell 脚本如下: #!/bin/sh ##################################################### ...

  9. javascript常用知识汇总

    javascript这个语言庞大而复杂,我用了三年多了,还是皮毛都不会.从刚开始的jquery,到后来的es6,每天都在学习,每天都在忘记. 1.禁止手机虚拟键盘弹出 在开发适配手机的页面时,出现了这 ...

  10. NDK开发之<cpu-features.h模块功能>

    今天研究下cpufeatures库,它是一个轻量级的展示CPU特性的模块,调用者在运行时候可以根据这个库提供的简单接口获取到目标机的CPU架构和特性. 一.代码路径: $NDK_ROOT/source ...