uva11129 - An antiarithmetic permutation(反算数级数)

2023-11-20 19:38

本文主要是介绍uva11129 - An antiarithmetic permutation(反算数级数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

求不含任何等差数列的排列

我们只需把原有的等差数列打乱即可

在0-n-1中最大的等差数列是0,2,4,6……和1,3,5,7……

我们加入已经他们分别打乱,就是说前面的数字排列已经无需调整了

那么我们如何避免前后两部分的数组组成等差呢

只需把他们前后分开即可,

因为从这两部分中,你不可能拿出三个数等差排列。。

代码如下:

#include <cstdio>
#define M 10010
int n, a[M], b[M];
void dfs(int s, int t)
{int i = s;if(s+1>=t) return;for(int j = s; j <= t; j++) b[j] = a[j];for(int j = s; j <= t; j+=2,i++) a[i] = b[j];for(int j = s+1; j <= t; j+=2,i++) a[i] = b[j];dfs(s,(s+t)/2);dfs((s+t)/2+1,t);
}
int main ()
{int n;while(scanf("%d",&n),n){for(int i = 0; i < n; i++) a[i] = i;dfs(0,n-1);printf("%d:",n);for(int i = 0; i < n; i++) i?printf(" %d",a[i]):printf("%d",a[i]);printf("\n");}return 0;
}



这篇关于uva11129 - An antiarithmetic permutation(反算数级数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/396947

相关文章

10730-Antiarithmetic?【暴力枚举】

水题 求一个序列是否存在3个数按顺序构成等差数列 直接枚举等差数列的差值 时间复杂度降到 n * n / 3 开pos数组记录每个值得为之 楷vis数组记录目前i是否出现过 强行AC 15221397 10730 Antiarithmetic? Accepted C++ 0.035 2015-03-26 12:09:56 #include<cstdio>#include

数论 - 算数基本定理的运用 --- nefu 118 : n!后面有多少个0

题目链接: http://acm.nefu.edu.cn/JudgeOnline/problemshow.php   Mean:   略。 analyse:  刚开始想了半天都没想出来,数据这么大,难道是有什么公式? 首先我们要知道一点:n!里面所有的0都是2*5得来的,而且不管怎样2的数量一定是>5的数量,所以我们只需要考虑有多少个5就可。 后面也是看了解题报告才知道有

【ZOJ】3874 Permutation Graph 【FFT+CDQ分治】

传送门:【ZOJ】3874 Permutation Graph 题目分析: 容易知道一个个连通块内部的标号都是连续的,否则一定会有另一个连通块向这个连通块建边,或者这个连通块向另一个连通块建边。而且从左到右左边的连通块内最大的标号小于右边连通块内最小的标号。 然后我们可以构造dp方程: dp[n]=n!−i!∗dp[n−i] \qquad \qquad dp[n] = n! - i! *

LeetCode 31 Next Permutation

题意: 给出一串数字,求该排列的下一个排列。如果该排列为字典序最大排列,则输出字典序最小排列。 思路: 首先C++里面有求下一个排列的函数next_permutation,该函数返回0即表示当前排列字典序最大。 如果要自己动手实现,那么就考虑“如何找到比当前排列大1的排列”。 假设排列A(aaaXddd)比排列B(aaaYfff)大1,a部分为两排列相同部分,X与Y表示最靠左边不同

【Get深一度】信号处理(二)——傅里叶变换与傅里叶级数的区别与联系

1.傅里叶级数和傅里叶变换:  傅里叶级数对周期性现象做数学上的分析 傅里叶变换可以看作傅里叶级数的极限形式,也可以看作是对周期现象进行数学上的分析。 除此之外,傅里叶变换还是处理信号领域的一种很重要的算法。要想理解傅里叶变换算法的内涵,首先要了解傅里叶原理的内涵。 傅里叶原理表明:对于任何连续测量的数字信号,都可以用不同频率的正弦波信号的无限叠加来表示。     傅里叶变

String Permutation

Given two strings, write a method to decide if one is a permutation of the other. Example Example 1:Input: "abcd", "bcad"Output: TrueExample 2:Input: "aac", "abc"Output: False 思路:count比较一下就可以;

别人的傅氏级数展开式函数

在 Matlab 中,没有专门求傅氏级数的函数调用,但我们可编写一个函数来求 f (x)在 [-l,l]上的 Fourier 级数. 打开 Matlab 的 M 文件编辑窗口,输入如下命令行:  function [A,B,F]=fseries(f,x,n,a,b)  if nargin==3,a=-pi;b=pi;end  L=(b-a)/2;  if a+b~=0,f=subs(f,x,x+L

numpy.random中的shuffle和permutation

shuffle: 沿着第一个axis打乱子数组的顺序,但是内容不变,相当于沿着第一个axis把array切成n个sub-array,然后打乱sub-array的顺序。(如果只有一维就只打乱元素) >>> arr = np.arange(9).reshape((3, 3))>>> np.random.shuffle(arr)>>> arrarray([[3, 4, 5],[6, 7, 8]

numpy.random.permutation

随机排列一个序列,返回一个排列的序列。 >>> np.random.permutation(10) array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6]) >>> np.random.permutation([1, 4, 9, 12, 15]) array([15,  1,  9,  4, 12]) >>> arr = np.arange(9).reshape((3, 3))

【计算机组成原理】2.2.1_4 算数逻辑单元ALU

2.2.1_4 算数逻辑单元ALU 00:00 各位同学大家好,在这个视频中我们会学习什么是算术逻辑单元ALU。首先我们会介绍ALU在计算机内部的一个作用,以及它需要支持哪些功能。紧接着我们会介绍ALU具体的实现原理,当然这个部分简要了解即可,考试不太可能考它的实现原理。最后我们会教大家怎么看懂ALU的图示。在考研真题当中有可能会给大家一个电路图作为题目的信息,在电路图当中可能会包含ALU这个