检查class排座位
在写这篇文章之前,xxx已经写过了几篇关于改检查class主题的文章,想要了解的朋友可以去翻一下之前的文章
灯,带有一种明亮的光,每当深夜来临,是它陪伴着你,如此默默无闻。它是平凡的,外表华丽与否,那都是一样的,珍珠点缀,水晶加饰的灯它只能用以装饰,来满足人们的虚荣心,比起这,普普通通的日光灯是幸运的,因为它照明的本性没有改变,如同生活中的一部份人平平凡凡却实实在在。
- /* 排坐位
- 要安排:3个A国人,3个B国人,3个C国人坐成一排。
- 要求不能使连续的3个人是同一个国籍。
- 求所有不同方案的总数?
- */
- /*public class 排坐位 {
- public static char[] c = {'A','A','A','B','B','B','C','C','C'};
- public static int kinds= 0; // 不同方案总个数
- // 检查是不是有同一国人连续3个
- public static boolean check(char[] c){
- int count = 1; // 初始个数
- for(int i=0;i<c.length-1;i++){
- if(c[i]==c[i+1]){
- count++;
- }else{
- count = 1; // 初始个数
- }
- if(count>=3) return true;
- }
- return false;
- }
- // 全排列
- public static void f(char[] c,int start,int end){
- if(start == end){
- if(!check(c)){ // 检查是不是有同一国人连续3个
- kinds++; // 不同方案总个数加1
- }
- return ;
- }else{
- for(int i=start;i<=end;i++){
- char temp = c[i];
- c[i] = c[start];
- c[start] = temp;
- f(c,start+1,end); // 递归
- temp = c[i];
- c[i] = c[start];
- c[start] = temp;
- }
- }
- }
- public static void main(String[] args){
- f(c,0,c.length-1); // 全排列
- System.out.println("kinds:"+kinds);
- }
- }
- */
- 方法二
- public class 排坐位
- {
- public static int kinds=0;
- public static int b[]=new int[9];
- public static boolean vis[]=new boolean[9];
- public static int a[]=new int[]{1,1,1,2,2,2,3,3,3};
- static void dfs(int start,int end)
- {
- if(start==end)
- {
- kinds++;
- }
- else
- {
- for(int i=0;i<a.length;i++)
- {
- if(!vis[i])//未上坐
- {
- b[start]=a[i];
- if(start>1 && b[start-2]==b[start-1] && b[start-1]==b[start])
- continue;//边排边检查进步效率
- vis[i]=true;
- dfs(start+1,end);
- vis[i]=false;
- }
- }
- }
- }
- public static void main(String[] args)
- {
- dfs(0,a.length);
- System.out.println("kinds:"+kinds);
- }
- }
- 运行结果:
- kinds:283824
- 扩展:
- 如果每个国度的三个人是可重复的,即来自同一个国度的三个人是不辨别的,所以序列是可以重复的。
- 程序如下:
- import java.util.Arrays;
- public class 排坐位
- {
- static int kinds=0;
- static int a[]=new int[4];
- static int b[]=new int[4];
- static int c[]=new int[4];
- static int aim[]=new int[10];
- public static void main(String[] args)
- {
- Arrays.fill(a,1);
- Arrays.fill(b,2);
- Arrays.fill(c,3);
- dfs(1,3,3,3);
- System.out.println("kinds:"+kinds);
- }
- static void dfs(int start,int a,int b,int c)
- {
- if(start==10)
- {
- kinds++;
- for(int i=1;i<start;i++)
- {
- System.out.printf("%c",(aim[i]+64));
- }
- System.out.println();
- }
- else if(start<3)//肯定不会涌现三个座来自国度相同的,因为就两坐位。
- {
- aim[start]=1;
- a--;
- dfs(start+1,a,b,c);
- a++;
- aim[start]=2;
- b--;
- dfs(start+1,a,b,c);
- b++;
- aim[start]=3;
- c--;
- dfs(start+1,a,b,c);
- c++;
- }
- else
- {
- aim[start]=1;
- if(!(aim[start-2]==aim[start-1] && aim[start-1]==aim[start]) && a>0)//不是3连号,且A国度还有人未上坐
- {
- a--;
- dfs(start+1,a,b,c);
- a++;
- }
- aim[start]=2;
- if(!(aim[start-2]==aim[start-1] && aim[start-1]==aim[start]) && b>0)//同理
- {
- b--;
- dfs(start+1,a,b,c);
- b++;
- }
- aim[start]=3;
- if(!(aim[start-2]==aim[start-1] && aim[start-1]==aim[start]) && c>0)//同理
- {
- c--;
- dfs(start+1,a,b,c);
- c++;
- }
- }
- }
- }
- 运行结果为(部份结果):
- CCBBAABCA
- CCBBAACAB
- CCBBAACBA
- CCBBABAAC
- CCBBABACA
- CCBBABCAA
- CCBBACAAB
- CCBBACABA
- CCBBACBAA
- CCBBCAABA
- CCBBCABAA
- CCBCAABAB
- CCBCAABBA
- CCBCABAAB
- CCBCABABA
- CCBCABBAA
- CCBCBAABA
- CCBCBABAA
- kinds:1314
文章结束给大家分享下程序员的一些笑话语录: 乔布斯:怎么样还是咱安全吧!黑客:你的浏览器支持国内网银吗?苹果可以玩国内的网游吗乔布斯:......不可以黑客:那我研究你的漏洞干嘛,我也需要买奶粉!
---------------------------------
原创文章 By
检查和class
---------------------------------
检查class排座位的更多相关文章
- 团体程序设计天梯赛-练习集L2-010. 排座位
L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...
- L2-010. 排座位
L2-010. 排座位 题目链接:https://www.patest.cn/contests/gplt/L2-010 并查集 相关题目:L2-007. 家庭房产,L3-003. 社交集群 下午打的时 ...
- L2-010. 排座位(并查集)*
L2-010. 排座位 参考博客 #include<iostream> #include<math.h> using namespace std; ]; ][]; int fi ...
- [IOI2018] seats 排座位
[IOI2018] seats 排座位 IOI2018题解 压缩状态思想很不错的 每次把原来的贡献减掉,新来的再加上 最多涉及10个点 注意: 1.去重 2.下标从0开始 3.线段树初始的最小值个数都 ...
- pta l2-10(排座位)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805066135879680 题意:给宴席排座位,有n个人,m个 ...
- CCCC 排座位 图着色问题
1排座位:https://www.patest.cn/contests/gplt/L2-010 2图着色问题 https://www.patest.cn/contests/gplt/L2-023 建图 ...
- 排座位&&Little Elephant And Permutation——排列dp的处理
排列的问题,就是要把序列排个序,使之达到某种最优值或者统计方案数 dp可以解决部分排列问题. 通常的解决方案是,按照编号(优先级)排序决策,从左到右决策两种. 这里主要是第一个. 排座位• 有
- pat 团体天梯赛 L2-010. 排座位
L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...
- CCCC L2-010. 排座位【并查集/分类讨论】
L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...
随机推荐
- 蓝牙(2)用BluetoothAdapter搜索蓝牙设备示例
注意在搜索之前要先打开蓝牙设备 package com.e.search.bluetooth.device; import java.util.Set; import android.app.Acti ...
- 8款必备的免费移动Web开发框架(HTML5/JS)
标签:JavaScript HTML5 移动开发 Web开发 jQuery 应用程序框架 插件 概述:随着智能手机和平板电脑的普及,移动开发逐渐成为众多开发者追逐的潮流.拥有一款优秀的移动Web开发框 ...
- js模仿jquery里的几个方法next, pre, nextAll, preAll
/*siblings函数, 选取node的所有兄弟节点*/ function siblings(node){ if(node.nodeType === 1){ node.flag = true; // ...
- CodeForces 135 B. Rectangle and Square(判断正方形和 矩形)
题目:http://codeforces.com/problemset/problem/135/B 题意:给8个点 判断能否用 4个点构成正方形,另外4个点构成 矩形. 输出 第一行是正方形 ,第二行 ...
- 4种activity的启动模式
在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...
- Codeforces 633 C Spy Syndrome 2 字典树
题意:还是比较好理解 分析:把每个单词反转,建字典树,然后暴力匹配加密串 注:然后我就是特别不理解,上面那种能过,而且时间很短,但是我想反之亦然啊 我一开始写的是,把加密串进行反转,然后单词正着建字典 ...
- centos ssh 免密码登录
最近在学习的过程中遇到这个问题: A主机和B主机: A 免密码登录B: 首先在A的 ~/.ssh 目录中 执行 ssh-keygen -t rsa 一路回车 最后生成连个文件: 将id_rsa.pub ...
- CentOS7 安装98五笔输入法
86版的安装方式,网上找到一堆,折腾了很久才把98版的安装上,记录一下. 从这里下了这个 http://bbs.chinaunix.net/forum.php?mod=viewthread&t ...
- wuzhicms 查看模板中的所有可用变量和值
将代码放到模板中. {php print_r(get_defined_vars());} 页面显示如下: 这样看不清楚. 通过查看页面源文件的方式打开. 例如:chrome 浏览器打开方式,在页面空白 ...
- HTTP 报文总结、外送两本电子书
写在前面的话:喜欢这个比喻:如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹. HTTP是一个应用层协议,研究它的内容的确很枯燥,没啥意思,都是规定好的,我们只需要知道是什么就好了 ...