`
hellobin
  • 浏览: 65556 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

UVA 524 - Prime Ring Problem

    博客分类:
  • UVA
 
阅读更多

A ring is composed of n (even number) circles as shown in diagram. Put natural numbers $1, 2, \dots, n$ into each circle separately, and the sum of numbers in two adjacent circles should be a prime.

 

 


Note: the number of first circle should always be 1.

 

Input 

n (0 < n <= 16)

 

Output 

The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements.

 


You are to write a program that completes above process.

 

Sample Input 

6
8

 

Sample Output 

Case 1:
1 4 3 2 5 6
1 6 5 2 3 4

Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2

 

最后只能输出一行空行!否则WA

每行的最后不能有空格,否则PE

 

#define RUN
#ifdef RUN

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <assert.h>  
#include <string>  
#include <iostream>  
#include <sstream>  
#include <map>  
#include <set>  
#include <vector>  
#include <list>  
#include <cctype>   
#include <algorithm>  
#include <utility>  
#include <math.h>  
#include <ctime>  
using namespace std;

bool noAnswer;
int cases = 1;
#define MAXN 10000

int is_prime(int x) {
  for(int i = 2; i*i <= x; i++)
    if(x % i == 0) return 0;
  return 1;
}

int n, A[MAXN],	// A数组用于保存结果 A[x]=y 第x个位置放了大小为y的数
	isp[MAXN],	// isp数组用于判断是否素数 isp[x]=y 大小为x的数,其素数属性为y
	vis[MAXN];	// vis数组用于标示第i个数是否已经被使用过了 vis[x]=y,大小为x的数,已使用性为y

void dfs(int cur) {

  //递归边界,同时测试第一个数和最后一个数
  if(cur == n && isp[A[0]+A[n-1]]) {
	  noAnswer = false;
	  printf("%d", A[0]);
	  for(int i = 1; i < n; i++){
		  printf(" %d", A[i]);
	  }
      printf("\n");
  }
  else {
	  for(int i = 2; i <= n; i++){
		  if(!vis[i] && isp[i+A[cur-1]]) {
			  A[cur] = i;	//标志把数i放在cur的位置上
			  vis[i] = 1;	//标志i已经用了
			  dfs(cur+1);	//寻找下一个位置应该放的数
			  vis[i] = 0;	//还原全局变量,清除标志
		  }
	  }
  }

}


int main() {

#ifndef ONLINE_JUDGE
	freopen("524.in", "r", stdin);
	freopen("out.out", "w", stdout); 
#endif

	//生成素数表,加快后面的判断
	//判断第i个数是否是素数,如果isp[i]返回1则是,返回0则否
	memset(isp, 0, sizeof(isp));
	//isp[2] = isp[3] = isp[5] = isp[7] = isp[11] = isp[13] = isp[17] = isp[19] = isp[23] = isp[29] = isp[31] = isp[37] = 1;
	for(int i = 2; i <= 20*2; i++){
		isp[i] = is_prime(i);
	}

	A[0] = 1;
	bool isprint = false;

	while(scanf("%d",&n) != EOF){

		//Remove last duplicate line
		if(isprint){
			printf("\n");
		}
		isprint = true;
		noAnswer = true;
		cout << "Case " << cases << ":" << endl;
		cases++;

		memset(vis, 0, sizeof(vis));

		//自环的情况
		if(n==1) { printf("%d\n",A[0]); continue;}            

		//重要的剪枝!!!
		//如果n为奇数,存在不等于2的偶数,不为素数,可以直接排除
		// 奇+偶=奇
		// 奇+奇=偶
		// 偶+偶=偶
		if(n%2 != 0) { printf("No Answer\n"); continue;}        

		dfs(1);
		if(noAnswer){
			cout << "No Answer" << endl;
		}
		
	}


  return 0;
}

#endif

 

 

 

 

分享到:
评论

相关推荐

    UVaOJ-401(Palindromes).zip_401 Palindromes

    标题中的"UVaOJ-401(Palindromes)"表明这是一个关于解决UVa Online Judge(UVa OJ)上编号为401的编程挑战,该挑战的主题是"Palindromes",即回文串。回文串是指一个字符串无论从前读到后还是从后读到前都是相同的,...

    Uva 1510 - Neon Sign

    ### Uva 1510 - Neon Sign #### 问题背景与描述 在题目“Uva 1510 - Neon Sign”中,我们面对的是一个霓虹灯招牌设计问题。该霓虹灯招牌由一系列位于圆周上的角点组成,并通过发光管连接这些角点。发光管有两种...

    uva705-Slash-Maze-.rar_Slash_uva705

    【标题】"uva705-Slash-Maze-.rar_Slash_uva705" 指向的是一个在UVa Online Judge (UVa OJ) 上提交并通过的编程问题,具体为问题编号705,名为"Slash Maze"。这个压缩包很可能包含了该问题的解决方案源代码。 ...

    UVA100~200---52道题accept代码,均顺利accept过

    这些文件名代表的是在UVA(University of Virginia)在线判题系统上解决的编程题目,主要是C++语言编写的解决方案。UVA是一个知名的在线编程竞赛平台,它提供了大量的算法问题供程序员挑战,有助于提高编程技能和...

    开源项目-codingsince1985-UVa#uva-online-judge-solutions-in-golang.zip

    开源项目-codingsince1985-UVa#uva-online-judge-solutions-in-golang.zip,两年来每天都在解决一个uva在线裁判问题,算起来…

    UVA133-TheDoleQueue.zip_site:www.pudn.com_uva133

    《UVA133 - 救济金发放问题:The Dole Queue》 在计算机科学领域,算法是解决问题的关键工具,特别是在处理复杂数据结构和优化问题时。UVA(University of Virginia)在线判题系统提供了丰富的算法题目供程序员挑战...

    Algorithm-UVA-Solutions-in-Python.zip

    "Algorithm-UVA-Solutions-in-Python.zip"这个压缩包文件正是针对UVA竞赛中问题的Python 3解决方案集合。 Python作为一门易学且功能强大的编程语言,因其简洁的语法和丰富的库支持,成为了许多算法爱好者和开发者的...

    uva532-Dungeon-Master.rar_dungeon

    《UVA532 Dungeon Master:解密游戏编程的深度探索》 在计算机科学与编程领域,UVA(University of Virginia)在线判题系统是一个深受程序员喜爱的平台,它提供了丰富的算法题目供学习者挑战。其中,编号为532的...

    tpcw-nyu-uva-client 客户端

    "tpcw-nyu-uva-client 客户端"是一个专为TPCW(Transaction Processing Performance Council Workloads)设计的应用程序,由纽约大学(NYU)和弗吉尼亚大学(UVA)共同开发。这个客户端软件主要用于模拟和评估数据库...

Global site tag (gtag.js) - Google Analytics