[iT铁人赛Day29]练习题(8)

时间过得真快,一转眼就来到做练习题的最後一天,明天要做最後总结
最後一天要来做练习题第八题
第八题要找的是子集合的个数
假设1到K然後找符合要求的子集合个数的总数
像是1到4,就要找包含{1,2,3,4}这4个数字的子集合
题目的序列是这个样子
{1,2,3,7,1,12,9,11,9,6,3,7,5,4,5,3,1,10,3,3}
然後我们要先找到包含{1,2,3,4}四个数字的序列
找到{1,2,3,7,1,12,9,11,9,6,3,7,5,4}这里,就包含了{1,2,3,4}
然後往後推{2,3,7,1,12,9,11,9,6,3,7,5,4,5},把{1}删掉
整个序列还是包含{1,2,3,4},以此类推,找出包含{1,2,3,4}
且符合设定的最短序列个数。
最後我们找到符合要求的最短序列个数为13个
第二笔资料要我们找包含{1,2,3,4,5,6,7,8}这8个数字的子集合
因为我们没有符合这些子集合的序列
所以第二笔资料显示"sequence nai"
最後,第八题的程序码如下:

import java.util.*;
class main{
	static int MAx=Integer.MAX_VALUE;
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		int t=sc.nextInt();
		for(int j=1;j<=t;j++){
			int n=sc.nextInt(),m=sc.nextInt(),k=sc.nextInt();
			int[] x=new int[n+1];
			x[1]=1;
			x[2]=2;
			x[3]=3;
			for(int i=4;i<=n;i++){
				x[i]=(x[i-1]+x[i-2]+x[i-3])%m+1;
			}
			int[] y=new int[1000000];
			int sum=0,min=MAx;
			Queue<Integer> qu=new LinkedList<>();
			for(int i=1;i<=n;i++){
				qu.add(x[i]);
				if(++y[x[i]]==1&&x[i]<=k)
					sum++;
				if(sum>=k){
					while(qu.peek()>k || y[qu.peek()]>1){
						y[qu.peek()]--;
						qu.poll();
					}
					min=Math.min(qu.size(),min);
				}
			}
			System.out.println("Case "+j+": "+(min==MAx?"sequence nai":min));
		}
	}
}

执行结果如下
https://ithelp.ithome.com.tw/upload/images/20210929/20140567QIP75BI6TV.png
其实在写这篇文章的时候,时间有一点赶
因为我一开始先写CPE,用疯狂程设可以写
後来跑去写JAVA,JAVA写完,再回到疯狂程设
然後我的疯狂程设APP突然就打不开了,当时连网站都打不开
一时之间不知道该如何是好,之後才知道原来是版本的问题
过了这麽久需要更新也是正常的,更新一下就好了
那关於CPE的历届练习题就讲到这边了 谢谢大家


<<:  Day 28 - 使用各种方式取得资料

>>:  Day 14 建一个 Node.js 容器

DAY15:玉山人工智慧挑战赛-中文手写字辨识(Pytorch 自订义资料集)

资料扩增 我们组的资料扩增这部分,因为第一次比赛,这个方法效果没有到非常好,采取的是用mask的方式...

D27 - 「来互相伤害啊!」:运筹帷幄

来规划游戏蓝图吧。 视窗规划 基本上和小恐龙单元一样。 视窗主体 负责提供脚位资料、设定栏位。 游戏...

【从实作学习ASP.NET Core】Day14 | 後台 | 用 Identity 实作会员功能

今天要用 .NET Core 自带的使用者管理套件 Identity 来实现网站的会员功能 ASP....

DAY16 - 档案处理 - 上传前预览

接下来的范例都会以vue.js语法撰写喔! 情境 在上传图档到server前,须在前端UI上显示预览...

【在 iOS 开发路上的大小事-Day28】透过 Firebase 来管理资料 (Cloud Firestore 篇) Part2

前情提要 昨天已经将环境设定好了,今天要来将新增、读取、更新、删除、排序功能实作出来 开始实作 设计...