精华内容
下载资源
问答
  • 使用可移动元素法(活动...),很经济,在《组合数学》(Richard A.Brualdi)数中介绍了一种可移动元素法生成n个数的全排列的方法。这篇文章使用Java语言实现这种算法。 算法思想 首先使用数组存放初始序列,并为...

    使用可移动元素法(活动元素法)生成1~n的全排列(Java实现)

    全排列的概念

    给定一个整数n,我们将1-n这n个数字进行任意序列的排列,如果使用穷举法,显然时间复杂度是O(n!),很不经济,在《组合数学》(Richard A.Brualdi)数中介绍了一种可移动元素法生成n个数的全排列的方法。这篇文章使用Java语言实现这种算法。

    算法思想

    首先使用数组存放初始序列,并为序列中的每个元素规定一个方向(左或者右),初始状态所有元素方向相同(本算法中初始化为左方向),我们定义可移动元素:如果一个元素k的箭头指向一个与其相邻但比它要小的元素,我们称这个k为可移动元素。算法步骤如下:

    • 1.初始化数组与其方向。
    • 2.当存在可移动元素时,执行如下循环:
      • 2.1找出最大的可移动元素m。
      • 2.2交换m和与其箭头所指的方向的相邻的元素。
      • 2.3改变当前数组中所有大于m的元素的箭头方向。
      • 2.4输出当前数组序列,为一个排列。
    • 3.退出循环,我们就得到了全排列。

    代码

    import java.util.Scanner;
    public class N_Combination {
    	public static void main(String[] args) {
    		Scanner sc=new Scanner(System.in);
    		int n=sc.nextInt();
    		Combination(n);
    	}
    	//生成n排列
    	public static void Combination(int n) {
    		int[] a=new int[n];//数组a存放1-n数字用来进行排列
    		int[] b=new int[n];//数组b元素存放方向,约定0代表左方向,1代表右方向
    		for(int i=0;i<n;i++) {
    			a[i]=i+1;//初始化数组
    			b[i]=0;//方向初始化全部向左
    		}
    		printArray(a);//先输出初始数组
    		int max=Active(a, b);//找到当前序列中最大的活动元素
    		int maxValue=max==-1?-1:a[max];
    		while(max!=-1) {
    			if(b[max]==0) {//活动元素向左,与左边元素交换
    				swap(a,max,0);
    				swap(b,max,0);
    			}else if(b[max]==1) {//活动元素向右,与右边元素交换
    				swap(a,max,1);
    				swap(b,max,1);
    			}
    			
    			for(int i=0;i<a.length;i++) {
    				if(a[i]>maxValue) {
    					//b[i]=(b[i]==1?0:1);//把所有值比maxValue大的数调换方向
    					if(b[i]==0) {
    						b[i]=1;
    					}else {
    						b[i]=0;
    					}
    				}
    			}
    			printArray(a);//输出当前排列
    			max=Active(a, b);
    			maxValue=max==-1?-1:a[max];
    		}
    	}
    	public static int Active(int[] a,int[] b) {//返回最大活动元素下标,如果没有活动元素,返回-1
    		int maxAc=-1;//存放当前最大活动元素
    		int maxPointer=-1;//存放当前最大活动元素下标
    		for(int i=0;i<a.length;i++) {
    			if(b[i]==0&&i>=1) {
    				if(a[i]>a[i-1]&&a[i]>maxAc) {
    					maxAc=a[i];
    					maxPointer=i;
    				}
    			}
    			if(b[i]==1&&i<=a.length-2) {
    				if(a[i]>a[i+1]&&a[i]>maxAc) {
    					maxAc=a[i];
    					maxPointer=i;
    				}
    			}
    		}
    		return maxPointer;
    	}
    	public static void printArray(int a[]) {//将数组输出
    		StringBuffer sb=new StringBuffer();
    		for(int i=0;i<a.length;i++) {
    			sb.append(a[i]);
    		}
    		System.out.println(sb);
    	}
    	public static void swap(int a[],int pointer,int direction) {
    		if(direction==0) {//和左边元素交换
    			int temp=a[pointer];
    			a[pointer]=a[pointer-1];
    			a[pointer-1]=temp;
    		}
    		if(direction==1) {//和右边元素交换
    			int temp=a[pointer];
    			a[pointer]=a[pointer+1];
    			a[pointer+1]=temp;
    		}
    	}
    }
    
    
    展开全文
  • Largest Submatrix Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 694Accepted Submission(s): 331 Problem Description Now here is a m...

    Largest Submatrix

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 694    Accepted Submission(s): 331


    Problem Description
    Now here is a matrix with letter 'a','b','c','w','x','y','z' and you can change 'w' to 'a' or 'b', change 'x' to 'b' or 'c', change 'y' to 'a' or 'c', and change 'z' to 'a', 'b' or 'c'. After you changed it, what's the largest submatrix with the same letters you can make?
     

     

    Input
    The input contains multiple test cases. Each test case begins with m and n (1 ≤ m, n ≤ 1000) on line. Then come the elements of a matrix in row-major order on m lines each with n letters. The input ends once EOF is met.
     

     

    Output
    For each test case, output one line containing the number of elements of the largest submatrix of all same letters.
     

     

    Sample Input
    2 4 abcw wxyz
     

     

    Sample Output
    3
     
    代码:

    #include<stdio.h>
    #include<string.h>
    #define N 1005
    #define MX(a,b) (a>b?a:b)
    int num[N];
    char s[N][N];
    int n,m;

    bool check(char c,char ss)
    {
       if(c=='a')
       return ss=='a'||ss=='w'||ss=='y'||ss=='z';
       if(c=='b')
       return ss=='b'||ss=='w'||ss=='x'||ss=='z';
       if(c=='c')
       return ss=='c'||ss=='x'||ss=='y'||ss=='z';  
    }

    int main()
    {
       while(scanf("%d%d",&n,&m)!=-1)
       {
          for(int i=0;i<n;i++)
       scanf("%s",s[i]);
       int max=0;
       for(char c='a';c<='c';c++)
       {
          memset(num,0,sizeof(num));
       for(int i=0;i<n;i++)
       {
          for(int j=0;j<m;j++)
       {
          if(check(c,s[i][j]))
          num[j]++;
          else
          num[j]=0;   
          }   
          for(int j=0;j<m;j++)
          {
            int cnt=1;
            if(!num[j])
            continue;

          //枚举每个高度,然后以它做基准,向左向右扩张,扩张条件是h[i-k]>=h[k]、h[i+k]>=h[k]。记录扩张的个数即可。
            for(int k=1;j-k>=0&&num[j-k]>=num[j];k++)
            cnt++;
            for(int k=1;j+k<m&&num[j+k]>=num[j];k++ )
            cnt++;
            max=MX(max,cnt*num[j]);
           }
             }     
       }       
       printf("%d\n",max);
       }  
       return 0;
    }

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2870

    转载于:https://www.cnblogs.com/hebozi/archive/2012/08/11/2633470.html

    展开全文
  • 元素元素则代表了某个元素的子元素,这个子元素虽然在逻辑上存在,但却并实际存在于文档树中。 伪元素作用 伪元素用来表示 原正常元素中的 ...选定段落最前 即就跟打字的时候把光标移动到段落最开头一样

    伪元素
    伪元素则代表了某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中。


    伪元素作用
    多用于作选择器,选择特殊位置的元素
    伪元素用来表示 原正常元素中的 特殊位置
    比如first-letter就是一个伪元素 用来表示p段落(p中段落就是一个元素)中第一个字 通常借此来对一些元素中特殊位置的字符进行修改


    first-letter
    first-letter 选定段落中第一个字

    first-line
    first-line 选定一整行

    before
    选定段落最前 即就跟打字的时候把光标移动到段落最开头一样 可借此在段落最前面输入东西

    after
    选定段落后面 即就跟打字的时候把光标移动到段落最后面一样 可借此在段落最前面输入东西

    content
    一个奇怪的玩意 不知道是不是伪元素
    用于在段落加入不可选定的内容 一般配合before和after使用

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>伪元素</title>
    		<style type="text/css">
    			p:first-letter{
    				color: orange;
    				font-size: 100px;
    			}/*first-letter 只修改p段落中第一个字*/
    			p:first-line{
    				color: red;
    			}/*first-line 修改一整行*/
    			p:before{
    				content:"劳资給呢一道";
    				font-size: 100px;
    			}/*before和content配合使用 
    			可在元素最前面加上不可选内容内容*/
    			p:after{
    				content:"不要,我不要刀";
    				color: gold;
    			}
    		</style>
    		<!--
    			伪元素用来表示 原正常元素中的 特殊位置
    			比如first-letter就是一个伪元素 用来表示p段落(p中段落就是一个元素)中第一个字
            -->
    	</head>
    	<body>
    		<p> 劳资給腻易圈<br/>打你嗷</p>
    	</body>
    </html>
    
    
    展开全文
  • for循环是一种遍历列表的有效方式,但在for循环中应修改列表,否则将导致Python难以跟踪其中元素。要在遍历列表的同时对其进行修改,使用while循环。通过将while循环同列表和字典结合起来使用,收集、存储并...

    for循环是一种遍历列表的有效方式,但在for循环中不应修改列表,否则将导致Python难以跟踪其中元素。要在遍历列表的同时对其进行修改,可使用while循环。通过将while循环同列表和字典结合起来使用,可收集、存储并组织大量输入,供以后查看和显示。

    假设有一个列表,其中包含新注册但还未验证的网站用户;验证这些用户后,如何将他们移到另一个已验证用户列表中呢?一种办法是使用一个while循环,在验证用户的同时将其从未验证用户列表中提取出来,再将其加入到另一个已验证用户列表中。

    大大的图

    图片发自简书App

    我的图

    图片发自简书App

    我们首先创建了一个未验证用户列表unconfirmed_users,其中包含丽丽、小明和大胖,还创建了一个空列表confirmed_users,用于存储已验证的用户。while循环将不断运行,直到列表unconfirmed_users变成空的。在这个循环中,函数pop()以每次一个的方式从列表unconfirmed_users末尾删除未验证的用户,并把删除值赋值到变量current_user。将验证用户以首字母大写的形式打印出来。把变量current_user值以append()方式加入到列表confirmed_users末尾。

    完善了已验证用户列表confirmed_users之后,用for循环把里面的值打印出来。

    这里面有一个有意思的事情是title(),upper(),lower()这样的函数奈何不了汉字。汉字不像字母,没有大小写。比如,把title()改成lower()结果还是不变

    图片发自简书App

    用户验证以后就是用户登录,简化起见,只使用用户名登录。用户输入用户名,用if语句与列表中已验证的用户名进行比较,如果一致,则欢迎用户登录。如果不一致,请用户重新检查用户名

    图片发自简书App

    图片发自简书App

    好像随机输入的中文变量不能与列表中元素进行比较,这个程序无论我怎么输入中文,都执行的else语句。而且我试了一下让程序自行输出中文,会乱码

    图片发自简书App

    但是如果把整个程序改成英文的,就那非常通畅的执行

    图片发自简书App

    图片发自简书App

    展开全文
  • 给定一个非空的整数数组,从数组第一个元素(下标为0的元素)开始遍历进行移动,下一次向后或向前移动元素的值 的位数(值为正数向后移动,值为负数向前移动,值为零不移动),依次类推进行移动,若某次移动数组...
  • 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。给定一个int数组A,同时给定A的大小n...
  • * 解决数组长度开变问题 * * 在已有的数据新增一个元素 * 采用移动指针的方式来处理 * */ public class DynamicArrAdd { public static void main(String[] args) { //已有数组长度 3 int[] arr ...
  • 今天学习的过程中遇到了一个问题,就是明明在浏览器上能够定位到的元素,但是在selenium运行跑起 来始终报错,无法交互的问题。想了很久找了很多地方都没有找到答案。 就是这个结束时间,前面的开始时间同样的方法...
  • 法1:算法设计:开辟另外一个与所需处理数组空间大小相同的的数组来存处理后的元素。循环过程中,0~n-k-1个元素的确是向后移动,而后面的则是顺序从后向前移动。因此用取模运算就可以决定每个元素移动后的的最终...
  • 今天在网上找了个省市区的js三级联动代码,将js代码位置移动了一下之后,IE下发现了一个问题,全局js中不可调用页面元素的属性(因为js文件中使用了document.getElementById(eleid))。 所以将调用联动js代码写到了...
  • 移动设计正发生着质的飞跃。但我不得不说操纵移动设计最重要的因素是色彩。...幸好这种情况正在改变——因为色彩渐渐变成移动设计中不可或缺的元素并有了它自己的流行趋势。 什么是色彩? 颜色的有趣生动、...
  • 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。 二.示例 三.算法分析 先对列表进行排序,防止得到不是最小...
  • 这是一组实用程序,用于转换元素(例如,移动,旋转,镜像和复制)。 这个类里面的方法都是静态方法,所以使用前需要实例化。 示例: ElementTransformUtils.RotateElement(doc, ElementId, line, angle); ...
  • 苹果会对position: fixed的元素位置做调整,这件事情已经遇到两次了。问题移动端开发中为了实现一个居中的弹窗,我们经常会做一个{position: fixed; height: 100%}的半透明蒙层,然后相对这个蒙层增加一个子节点,...
  • ②参数是精确单位 前面x 后面y 顺序不可变 若第一个是精确单位 一定是x 则另一个垂直居中 ③混合单位 有顺序要求 第一个为x 第二个为y (5)背景固定 background-attachment: scroll | fixed ; (6)背景复合...
  • 所以对vue框架下element的table封装了一个简单的回车跳跃功能,可以在同一行内敲击回车键移动到下一个输入元素. (PS.拒绝把浏览器tab键自带功能粗暴的绑定在回车事件上.太优雅谢谢 ) 如果你使用的是表格,并且混合...
  • 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。 例如: 输入: [1,2,3] 输出: 2 说明: 只有两个动作是必要的...
  • 1 自动化测试自动化测试(通常称为功能测试)是指软件测试的自动化,它是将人驱动的测试...创建优良可靠地测试过程,减少人为错误实施自动化测试的前提:需求变动频繁,项目周期足够长,自动化测试脚本重复使用...
  • 基于Query的Swiper插件实现移动手机端幻灯片切换(在每一张幻灯片div中插入自定义的元素,代码简介,扩展性好。) 想在移动端做一个简洁的类似幻灯片切换的功能,在网上找了很多幻灯片的切换插件,功能太多了而且...
  • 当您需要上下移动元素或将元素添加到特定位置时,情况更是如此:由于表单将使用字段名称进行处理,因此我们应该交换字段内容或字段名称,而不是移动字段本身来获得工作完成。 这在javascript中并不是很友好,因此此...
  • 家小宝导语:软装是什么?软装的设计及构成元素主要有些什么?软装设计是一个新兴的行业,一个有巨大市场的行业... 家装软装包括哪些 软装,即在商业空间与居住空间中所有可移动元素统称软装。软装修、软装饰。软...
  • 【题目大意】  初始给定n个集合:{1},{2},…,{n},要求支持三种操作: ... 2 "2 p q":若p,q在同一集合,将元素p移动到q所在的集合。  3 "3 p" :询问p所在集合的元素个数及元素和。    总共
  • "2 p q":若p,q在同一集合,将元素p移动到q所在的集合 "3 p" :询问p所在集合的元素个数及元素和 m个询问,1 【题解】 维护sum[x],cnt[x],表示以x为father的集合的 元素和及元素个数,就
  • 菜单不可拖拽7.元素拖拽时菜单不打开8.元素拖拽至接近底部时,若剩余高度不足以展开菜单则自动吸附至底部。实现思路如果适配移动端,则需加注touch事件1.鼠标按下时1.1.如果此时已打开菜单,则不做响应1.2.未打开...
  • 本文介绍识别元素的工具和元素的定位方法,识别元素的工具主要有uiautomator和monitor,以及Appium Inspector(Windows下小编在1.7.0之后版本使用,1.4.16版本不行),本系列教程用的appium1.4.16本文,故暂介绍...
  • IOS 实现可移动拖拽的View

    千次阅读 2013-08-05 13:25:10
    在一个大的view中,某个view元素可以在该view中自由拖动,但是能超出该大view范围。 首先添加拖动Gesture: UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:...
  • 注:赶时间的同学直接下拉到底,看结论。 我使用transform对一个元素进行位移,代码如下: <div class="box"> <span>今天你吃了么?</span> </div> // css span { transform: ...
  • CSS设置元素浮动--03

    2020-08-31 22:36:03
    通过浮动可以使一个元素向其父元素的左侧或右侧移动,使用 float 属性来设置元素的浮动, 选值: none 默认值 ,元素不浮动 left 元素向左浮动 right 元素向右浮动 注意: 元素设置浮动以后,水平布局的等式便...
  • js实现元素拖拽功能

    2020-05-25 21:11:01
    注意: 链接和图片默认是拖动的,需要 draggable 属性。 相关事件 被拖动的源对象可以触发的事件: ondragstart:源对象开始被拖动 ondrag:源对象被拖动过程中(鼠标可能在移动或者未移动) ondrag
  • 主要涉及三个鼠标事件 mousedown,onmousemove和onmouseup 注意:onmouseup绑定在...鼠标事件2 - 鼠标移动时(要检测,元素是否标记为移动,如果是,则更新元素的位置到当前鼠标的位置[要减去第一步中获得的偏...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,385
精华内容 554
关键字:

不可移动元素