COGS——C66. [HAOI2004模拟] 数列问题

http://www.cogs.pro/cogs/problem/problem.php?pid=66

★☆   输入文件:dfs3.in   输出文件:dfs3.out   简单对比

时间限制:1 s   内存限制:128 MB

问题描述
试编程将 1 至 N ( N ≤ 15 )的自然数序列 1 , 2 , … , N 重新排列,使任意相邻两数之和为素数。例如 N=3 时有两种排列方案 123 、 321 满足要求。

【输入格式】

输入文件:dfs3.in

第一行:一个整数n(1<=n<=15)

【输出格式】

输出文件:dfs3.out

输出若干行,每行为一种排列方案(排列方案按字典序排列, 相邻数字之间用空格分隔) ),最后一行输出排列方案总数。

【输入样例】

输入文件名:dfs3.in

3

输出文件名:dfs3.out

1 2 3
3 2 1
2

 1 #include <algorithm>
 2 #include <cstdio>
 3
 4 using namespace std;
 5
 6 int n,ans,a[55];
 7 int prim[55],use[55];
 8 void Prim()
 9 {
10     for(int i=1;i<=(n<<1);i++)
11     {
12         prim[i]=1;
13         for(int j=2;j*j<=i;j++)
14             if(i%j==0)
15             {
16                 prim[i]=0;
17                 break;
18             }
19     }
20 }
21
22 void DFS(int cnt)
23 {
24     if(cnt==n+1)
25     {
26         ans++;
27         for(int i=1;i<=n;i++)
28             printf("%d ",a[i]);
29         printf("\n");
30         return ;
31     }
32     for(int i=1;i<=n;i++)
33     {
34         if(use[i]) continue;
35         if(!prim[a[cnt-1]+i]&&cnt>1) continue;
36         use[i]=1; a[cnt]=i;
37         DFS(cnt+1);
38         use[i]=0;
39     }
40 }
41
42 int main()
43 {
44     freopen("dfs3.in","r",stdin);
45     freopen("dfs3.out","w",stdout);
46     scanf("%d",&n);
47     Prim();  DFS(1);
48     printf("%d",ans);
49     return 0;
50 }
时间: 2024-10-09 03:29:39

COGS——C66. [HAOI2004模拟] 数列问题的相关文章

cogs——66. [HAOI2004模拟] 数列问题

66. [HAOI2004模拟] 数列问题 本以为会TLE,可... dfs水题(很基础) #include<bits/stdc++.h> using namespace std; int x,shu[20],ans; bool vis[20]; void print() { for(int i=1; i<=x; i++) printf("%d ",shu[i]); puts(""); ++ans; return; } bool tp(int px

数据结构(Splay平衡树):COGS 339. [NOI2005] 维护数列

339. [NOI2005] 维护数列 ★★★★☆   输入文件:seq2005.in   输出文件:seq2005.out   简单对比 时间限制:3 s   内存限制:256 MB [问题描述] 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 操作编号 输入文件中的格式 说明 1.  插入 INSERT_posi_tot_c1_c2_..._ctot 在当前数列的第 posi 个数字后插入 tot 个数字:c1, c2,

cogs 2632. [HZOI 2016] 数列操作d

2632. [HZOI 2016] 数列操作d ★★★   输入文件:segment.in   输出文件:segment.out   简单对比时间限制:3 s   内存限制:512 MB [题目描述] 一个长度为n的序列,一开始序列数的权值都是0,有m次操作 支持两种操作: 1 L R x,给区间[L,R]内位置为pos的数加上(pos-L)*x 0 L R,查询区间[L,R]内的权值和 最终答案对109+7取模. [输入格式] 第一行两个数n,m,表示序列长度和操作次数 接下来m行,每行描述一

【2016北京集训测试赛(八)】 crash的数列

Description 题解 题目说这是一个具有神奇特性的数列!这句话是非常有用的因为我们发现,如果套着这个数列的定义再从原数列引出一个新数列,它居然还是一样的...... 于是我们就想到了能不能用多点数列套着来加速转移呢? 但是发现好像太多数列套起来是可以烦死人的...... 我们就采用嵌套两次吧,记原数列为A,第一层嵌套为B,第二层嵌套为C. 我们其实可以发现一些规律,对于Ci,它对应了B中i的个数:对于Bi,它对应了A中i的个数. 稍加处理即可,我们一边计算一边模拟数列的运算,同时可以计算

leetcode第70题-Climbing Stairsd

题目的意思是有n个台阶,每次只能上1或2个台阶,求出总共有几种上台阶的方法. 分析:因为每次都只能+1或+2,最后的每一个n就是由1或2的组合组成.但是换一种思路, 我们对比一些斐波那契数列,1.2.3.5.8....,即f(n)=f(n-1)+f(n-2).如果第一步走了1个台阶,剩下的组合是f(n-1),如果第一步走2个台阶,则剩下的组合f(n-2),从而得到递推式f(n)=f(n-1)+f(n-2),所以,这个爬楼梯就是一个递归的斐波那契数列问题. 剩下的问题就是如何求出斐波那契数列的问题

NOIP模拟赛 数列(seq)

Problem 2 数列(seq.cpp/c/pas) [题目描述] a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1]  (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. [输入格式] 第一行一个整数T,表示询问个数. 以下T行,每行一个正整数n. [输出格式] 每行输出一个非负整数表示答案. [样例输入] 3 6 8 10 [样例输出] 4 9 19 [数据范围] 对于30%的数据 n<=100: 对于60%的数据 n<=2*10^7:

COGS 2638. 数列操作ψ 线段树

传送门 : COGS 2638. 数列操作ψ 线段树 这道题让我们维护区间最大值,以及维护区间and,or一个数 我们考虑用线段树进行维护,这时候我们就要用到吉司机线段树啦 QAQ 由于发现若干次and,or之后,如果数据分布均匀,那么几乎所有的数在若干次操作后都会变成同一个数 因为我们的and操作中的0位,以及or操作当中的1位,都是可以把整个区间的那一二进制位重置为相同的 我们考虑利用这一个性质 如果我们直接维护一个区间内的值是否是相同的,那么效果会差很多. 我们发现我们在进行and操作的时

2015.9.11模拟赛 codevs 4159【hzwer的迷の数列】

题目描述 Description hzwer找了一个人畜无害的迷の数列…… 现在hzwer希望对这个数列进行一些操作,请你来回答hzwer的问题. 操作一:查询第i个数的大小 操作二:把第i个数的大小改成x 操作三:将整个序列反转.即把第i个数放到第n-i+1个. 输入描述 Input Description 输入数据第一行两个数n,m,表示数列长度和操作数. 第二行n个数,表示n个元素初始值. 以下m行,每行开头一个数opr,表示操作种类. opr=1,则后面接一个数i,表示查询第i个数大小.

noip模拟赛 数列

题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 输入输出格式 输入格式: 第一行一个整数T,表示询问个数. 以下T行,每行一个正整数n. 输出格式: 每行输出一个非负整数表示答案. 输入输出样例 输入样例#1: 3 6 8 10 输出样例#1: 4 9 19 说明 对于30%的数据 n<=100: 对于60%的数据 n<=2*10^7: 对于100%的数据 T<=100,