Problem Statement

Construct a set $S$ of integers satisfying all of the conditions below. It can be proved that at least one such set $S$ exists under the Constraints of this problem.

  • $S$ has exactly $N$ elements.
  • The element of $S$ are distinct integers between $-10^7$ and $10^7$ (inclusive).
  • $ \displaystyle \sum _{s \in S} s = M$.
  • $ y-x\neq z-y$ for every triple $ x,y,z$ $(x < y < z)$ of distinct elements in $ S$.

Constraints

  • $1 \leq N \leq 10^4$
  • $|M| \leq N\times 10^6$
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

$N$ $M$

Output

Let $s_1,s_2,\ldots,s_N$ be the elements of $S$. Print a set $S$ that satisfies the conditions in the following format:

$s_1$ $s_2$ $\ldots$ $s_N$

If multiple solutions exist, any of them will be accepted.


Sample Input 1

3 9

Sample Output 1

1 2 6

We have $2-1 \neq 6-2$ and $1+2+6=9$, so this output satisfies the conditions. Many other solutions exist.


Sample Input 2

5 -15

Sample Output 2

-15 -5 0 2 3

$M$ may be negative.

存在等差数列,当且仅当存在三个数$x,y,z$,使得 $y-x=z-y$

移一下项,得到 \(2y=z+x\)

考虑一个数的三进制。如果集合中所有数的三进制表示下只有 \(0\) 和\(1\),那么 \(2y\) 的三进制表示下只由 \(0\) 和 \(2\) 组成。若要选出 \(x+z=2y\) ,当且仅当 \(x=z=y\),而集合有不可重性。所以如果这样构造,可以得出答案。易得构造出的数在 \([-10^7,10^7]\) 内(见附注)。

但是我们要保证所有数和为m。容易发现,如果一个集合 \(s\) 是合法的,那么给 \(s\) 中每一个数同时加上一个数,集合仍然没有等差数列。所以如果构造出序列后,我们先想办法让他们的和与 \(m\) 模 \(n\) 同余,然后再给每个数加上 \(\frac{(m-sum(s))}{n}\)即可。如何微调集合使得他们的和模 \(n\) 同余呢?在枚举三进制时,我们可以空出最后一位,然后微调。

上面就是大概思路,我们用样例详解

\(n=5,m=-15\)

首先构造有5个数的合法集合

\((0010)_3=3\)

\((0100)_3=9\)

\((0110)_3=12\)

\((1000)_3=27\)

\((1010)_3=30\)

和为 \(3+9+12+27+30=81\),模 \(5\) 余 \(1\)。\(m\) 模 \(5\) 余 \(0\)。

所以我们要选择 \(4\) 个数加 \(1\)。集合变成了:

\((0011)_3=4\)

\((0101)_3=10\)

\((0111)_3=13\)

\((1001)_3=28\)

\((1010)_3=30\)

那么我们再给每个数减去 \((85-(-15))/5=20\)。集合就是

$ {-16,-10,-7,8,10}$

代码就很好写了。

建议枚举初始合法三进制时用二进制枚举。

#include<bits/stdc++.h>
const int N=10005;
int n,s[N],ret;
long long m,x,sum,d;
int main()
{
scanf("%d%lld",&n,&m);
for(int i=2;i<=2*n;i+=2)
{
ret=3;
for(int j=1;j<15;j++)
{
if(i>>j&1)
s[i>>1]+=ret;
ret*=3;
}
sum+=s[i>>1];
}
x=((m-sum)%n+n)%n;
d=floor((1.00*m-sum)/n);
for(int i=1;i<=x;i++)
s[i]++;
for(int i=1;i<=n;i++)
printf("%lld ",s[i]+d);
}

[ARC145D] Non Arithmetic Progression Set的更多相关文章

  1. CF 1114 E. Arithmetic Progression

    E. Arithmetic Progression 链接 题意: 交互题. 有一个等差序列,现已打乱顺序,最多询问60次来确定首项和公差.每次可以询问是否有严格大于x的数,和查看一个位置的数. 分析: ...

  2. POJ3495 Bitwise XOR of Arithmetic Progression

    Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 772   Accepted: 175 Description Write ...

  3. Dirichlet's Theorem on Arithmetic Progression

    poj3006 Dirichlet's Theorem on Arithmetic Progressions 很显然这是一题有关于素数的题目. 注意数据的范围,爆搜超时无误. 这里要用到筛选法求素数. ...

  4. Find Missing Term in Arithmetic Progression 等差数列缺失项

    查找等差数列中的缺失项. e.g.Input: arr[] = {2, 4, 8, 10, 12, 14} Output: 6 Input: arr[] = {1, 6, 11, 16, 21, 31 ...

  5. BestCoder22 1002.NPY and arithmetic progression(hdu 5143) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5143 题目意思:给出 1, 2, 3, 4 的数量,分别为a1, a2, a3, a4,问是否在每个数 ...

  6. codeforces C. Arithmetic Progression 解题报告

    题目链接:http://codeforces.com/problemset/problem/382/C 题目意思:给定一个序列,问是否可以通过只插入一个数来使得整个序列成为等差数列,求出总共有多少可能 ...

  7. cf C. Arithmetic Progression

    http://codeforces.com/contest/382/problem/C 题意:给你n个数,然后让你添加一个数使得n+1个数能形成这样的规律,a[1]-a[0]=a[2]-a[1]=a[ ...

  8. CF1114E Arithmetic Progression(交互题,二分,随机算法)

    既然是在CF上AC的第一道交互题,而且正是这场比赛让我升紫了,所以十分值得纪念. 题目链接:CF原网 题目大意:交互题. 有一个长度为 $n$ 的序列 $a$,保证它从小到大排序后是个等差数列.你不知 ...

  9. Codeforces 1114E - Arithmetic Progression - [二分+随机数]

    题目链接:http://codeforces.com/problemset/problem/1114/E 题意: 交互题,有一个 $n$ 个整数的打乱顺序后的等差数列 $a[1 \sim n]$,保证 ...

  10. HDU 5143 NPY and arithmetic progression(思维)

    http://acm.hdu.edu.cn/showproblem.php?pid=5143 题意: 给定数字1,2,3,4.的个数每个数字能且仅能使用一次,组成多个或一个等差数列(长度大于等于3), ...

随机推荐

  1. Windows校验文件MD5和SHA值的方法

    1.需求背景 下载或传输文件后,需要计算文件的MD5.SHA256等校验值,以确保下载或传输后的文件和源文件一致 2.校验方法 如上图所示,可以使用Windows自带的certutil命令来计算一个文 ...

  2. Python Web:Django、Flask和FastAPI框架对比

    Django.Flask和FastAPI是Python Web框架中的三个主要代表.这些框架都有着各自的优点和缺点,适合不同类型和规模的应用程序. Django: Django是一个全功能的Web框架 ...

  3. ETL之apache hop系列1-ETL概念与hop简介

    ETL 简单介绍 ETL概念 ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的 ...

  4. 三维模型OBJ格式轻量化压缩处理的数据质量提升方法分析

    三维模型OBJ格式轻量化压缩处理的数据质量提升方法分析 在三维模型的OBJ格式轻量化压缩处理过程中,除了减小文件大小和提高加载速度之外,我们也需要考虑如何提升数据质量.以下是几种常见的方法: 1.优化 ...

  5. 14.4K Star,一款外观漂亮、运行快速、动画细腻的开源免费UI组件库

    之前给大家推荐了很多后台模版,有读者希望推荐一些跟通用的好看组件,毕竟出了后台还有很多其他场景嘛.所以,今天继续给大家推荐一个广受好评的UI组件库:NextUI 主要特性 NextUI的主要目标是简化 ...

  6. 《HelloGitHub》第 89 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  7. TypeScript中Class基础使用

    TypeScript是一种静态类型的JavaScript超集,它提供了许多增强的功能,其中之一就是对面向对象编程的支持.在TypeScript中,我们可以使用Class来定义类,这使得我们能够更加结构 ...

  8. Vmware中的centos7突然连接不上网络了,网络适配器采用的是NAT模式,解决办法?

    进入Windows操作系统,然后右键点击我们的电脑,进入到管理界面 计算机-> 管理->服务和应用程序->服务,找到如下服务进程 VMware DHCP Service, VMwar ...

  9. Azure Data Factory(七)数据集验证之用户托管凭证

    一,引言 上一篇文章中,我们讲解了 Azure Data Factory 在设置数据集类型为  Dataverse 的时候,如何连接测试.今天我们继续讲解认证方式这一块内容,打开 Link Servi ...

  10. C#结合OpenCVSharp4使用直方图算法比较图片相似度

    C#结合OpenCVSharp4使用直方图算法比较图片相似度 直方图有灰度直方图.颜色直方图,如果是灰度图像,那么就用灰度直方图,这里使用颜色直方图来计算两个图片的相似度. 这里只记录如何使用,至于算 ...