ADV数字的剪切

#include <iostream>

using namespace  std;

#define  SIZE 9
#define  MAXLEN  6

int data[SIZE][MAXLEN];
int numberLen[SIZE];
int overlapLen[SIZE+1][SIZE+1];

void IToA(int N ,int row)   //数字转换为数组
{
	int tmp=N;
	int i=0;
	while(tmp)
	{
		i++;
		tmp/=10;
	}
	numberLen[row]=i;
	tmp=N;
	for(int j=i-1;j>=0;j--)
	{
		data[row][j]=tmp%10;
		tmp/=10;
	}
}

void getOverlapLen(int i,int j)  //计算两个数字的最小重叠长度
{
	for(int len=1;len<=numberLen[i]&&len<=numberLen[j];len++)
	{
		int match=1;
		for(int m=numberLen[i]-len,n=0;m<numberLen[i]&&n<numberLen[j];m++,n++)
		{
			if(data[i][m]!=data[j][n])
			{
				match=0;
				break;
			}
		}

		if(match)
		{
			overlapLen[i][j]=len;
			break;
		}
	}
}

int maxLen=0;
int used[SIZE];

void getMaxLen(int step ,int numbers,int curlen,int remainingLen,int preNumber)
{
	if(step==numbers)
		return ;
	if(curlen+remainingLen-numbers+step+1<=maxLen)
		return;

	for(int i=0;i<numbers;i++)
	{
		if(!used[i])
		{
			used[i]=1;
			int tmpLen=curlen;

			if(overlapLen[i][preNumber]==0&&step!=0)    //连接成功
			{
				used[i]=0;
				continue;
			}	

			curlen+=numberLen[i]-overlapLen[i][preNumber];
			if(maxLen<curlen)
				maxLen=curlen;
			getMaxLen(step+1,numbers,curlen,remainingLen-numberLen[i],i);

			used[i]=0;
			curlen=tmpLen;

		}
	}
}

void main()
{
	//freopen("in.txt","r",stdin);
	int nTc;
	cin>>nTc;
	for(int tc=0;tc<nTc;tc++)
	{
		int N;
		cin>>N;
		maxLen=0;
		for(int i=0;i<N;i++)
		{
			used[i]=0;
			for(int j=0;j<N;j++)
			{
				data[i][j]=0;
				overlapLen[i][j]=0;
			}
		}

		int temp;
		int totalLen=0;
		for(int i=0;i<N;i++)
		{
			cin>>temp;
			IToA(temp,i);
			totalLen+=numberLen[i];

		}

		for(int i=0;i<N;i++)
		{
			for(int j=0;j<N;j++)
			{
				if(i!=j)
				getOverlapLen(i,j);
			}
		}

		getMaxLen(0,N,0,totalLen,SIZE);
		cout<<maxLen<<endl;
	}
}
时间: 2024-10-11 07:07:59

ADV数字的剪切的相关文章

第三、四单元总结

######第三单元###### ########################man命令########################### man  -->manual        ###man是手册缩写 man man               ###查看man命令的帮助 man passwd            ###查看passwd命令的帮助 man的级别 1        系统命令 2        系统接口 3        函数库 4        特殊文件,比如设备文

vim &nbsp; 账户的建立

THE THIRD DAY ##########################vim 用法############################### vim 1.命令模式 设定  vim /etc/vimrc set cursorline设定行线 set nu设定行号 在文件中修改 在文本中修改 :set cursorline/nocursorline 设定行线/取消行线 :set nu   设定行号 :set nonu取消行号 :help 查看vim帮助 ctrl + v 高亮显示局部选

linux系统中一些基本的操作指令

linux 中一些基本的指令:shell    :保护内核 什么是shell[[email protected] Desktop]$ 用户   主机名   directory 用户提示符 ##################date watch -n 1 date                         ##监控date命令每秒钟执行一次date 月月天天小时分钟.秒秒          ##更改时间date -d +400days +%m            #######查看400

vim用法

---------------  vim  --------------- vim:          vim是一款极方便的文本编辑软件,是UNIX下的同类型软件VI的改进版本.Vim经常被看作是"专门为程序员打造的文本编辑器",虽然它不仅用于编程,但也有人说它是一个完全的"IDE"(集成开发环境). vim命令模式设定 :set nu|nonu                  显示行号 :set mouse=a                  设定鼠标可以操作

Linux基础1-4单元

一.       第一单元 (一)         虚拟机控制 [[email protected]]$ rht-vmctl start desktop              ##开启虚拟机 Starting desktop. [[email protected]]$ rht-vmctl view desktop                        ##显示虚拟机 [[email protected]]$ rht-vmctl reset desktop             ##

Emacs列操作

也可以在Emacs中用C-x C-h列出全部命令,查找C-x r c,所有列模式命令都是以C-x r开始的 C-x r [email protected]                    point-to-registerC-x r SPC                    point-to-registerC-x r +        increment-registerC-x r b        bookmark-jumpC-x r c        clear-rectangl

linux学习笔记——man、管道符、vim编辑及快捷操作

########################man命令###########################man 级别 目标man 1  文件名    ####查找命令的帮助    man 5  文件名    ####查找配置文件的帮助man -f 关键字    ####显示给定关键字的简短描述man 退出      ###按q退出 man的快捷用法 /关键字        ###搜索关键字并且高亮显示结果(直接在man里面按/)n        ###向下匹配高亮结果N        #

Linux中vim的粘贴复制快捷键的使用

参考自maowang的随笔 剪切(删除): 剪切其实也就顺带删除了所选择的内容,所以既可以当剪切命令用,也可以当删除命令使用. 首先,可以在命令模式下输入v进入自由选取模式,选择需要剪切的文字后,按下d就可以进行剪切了. 其他命令模式下剪切命令: dd:剪切当前行 ndd:n表示大于1的数字,剪切n行 dw:从光标处剪切至一个单子/单词的末尾,包括空格 de:从光标处剪切至一个单子/单词的末尾,不包括空格 d$:从当前光标剪切到行末 d0:从当前光标位置(不包括光标位置)剪切之行首 d3l:从光

周内班总结(2)

##vim用法## 编辑文本 1.echo [[email protected] mnt]# echo nihao >file ##输出nihao到file [[email protected] mnt]# cat file ##显示内容 nihao [[email protected] mnt]# echo hello >>file ##追加hello到file [[email protected] mnt]# cat file ##显示内容 nihao hello 2.cat >