CSP2024-J 题解

news2024/11/22 23:44:12

目录

  • T1 扑克牌
  • T2 地图探险
  • T3 小木棍
  • T4 接龙

T1 扑克牌

link

氺,拿个数组记录下就好。

T2 地图探险

link

氺,小型模拟题。

T3 小木棍

link

题意
用恰好 n n n 根小木棒拼一个正整数,并且要尽量小。

思路
看一眼数据范围, n ≤ 1 0 5 n \le 10^5 n105 ,那拼出来的数很大?要 高精度 !
然后看到特殊性质, n n n 7 7 7 的倍数?数学、贪心、找规律 !
打个表,然后由于题目告诉我们答案与 m o d mod mod 7 7 7 有关,就将同余的数放在一起找规律,规律还是很简单的,注意不重不漏!

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t; cin>>t;
	while(t--){
		int n; cin>>n;
		if(n==1) cout<<"-1\n";
		else if(n==2) cout<<"1\n";
		else if(n==3) cout<<"7\n";
		else if(n==4) cout<<"4\n";
		else if(n==5) cout<<"2\n";
		else if(n==6) cout<<"6\n";
		else if(n==7) cout<<"8\n";
		else if(n%7==0){
			for(int i=1;i<=n/7;i++) cout<<8;
			cout<<"\n";
		}
		else if(n%7==1){
			cout<<10;
			for(int i=1;i<=(n-8)/7;i++) cout<<8;
			cout<<"\n"; 
		}
		else if(n%7==2){
			cout<<1;
			for(int i=1;i<=(n-2)/7;i++) cout<<8;
			cout<<"\n";
		}
		else if(n%7==3){
			if(n==10) cout<<"22\n";
			else{
				cout<<200;
				for(int i=1;i<=(n-17)/7;i++) cout<<8;
				cout<<"\n";
			}
		}
		else if(n%7==4){
			cout<<20;
			for(int i=1;i<=(n-11)/7;i++) cout<<8;
			cout<<"\n";
		}
		else if(n%7==5){
			cout<<2;
			for(int i=1;i<=(n-5)/7;i++) cout<<8;
			cout<<"\n";
		}
		else{
			cout<<6;
			for(int i=1;i<=(n-6)/7;i++) cout<<8;
			cout<<"\n";
		}
	}
	return 0;
}

当然也可以用 d p dp dp 做,但是懒得写了。

T4 接龙

link

这题还是很有意思的。

题意
n n n 个人参与接龙游戏,第 i i i 个人会获得一个整数序列 S i S_i Si 作为他的词库。游戏有若干轮,每一轮规则如下:

每一轮由某个人 p p p 进行接龙(这个人 p p p 不能与上一轮的人相同,第一轮除外)。

这个人可以取他的词库 S p S_p Sp 中长度为 [ 2 , k ] [2,k] [2,k] 的连续一段 A A A 进行接龙(如果是第一轮, A A A 需以 1 1 1 开头;否则, A A A 需以上一轮的接龙序列的最后一个元素为开头)。

现在有 q q q 次询问,第 i i i 次你需要判断 —— 这 n n n 个人进行一次游戏,若在第 r i r_i ri 轮结束,是否能使最后一次接龙的序列的最后一个元素为 c i c_i ci

多测,有 T T T 组数据。

1 ≤ T ≤ 5 1 \le T \le 5 1T5 , 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105 , 2 ≤ k ≤ 2 × 1 0 5 2 \le k \le 2 \times 10^5 2k2×105 , 1 ≤ q ≤ 1 0 5 1 \le q \le 10^5 1q105

思路
考虑 D P DP DP
设状态为 f i , j f_{i,j} fi,j 表示在第 i i i 轮游戏中,以数字 j j j 为结尾是否可行。三种情况如下:
f i , j = { − 1 不可行 k 只有一种可行方案且是由 k 这个人来完成的 0 有多种可行方案(即可行方案数 > 1 ) f_{i,j} = \begin{cases} -1 & 不可行 \\ k & 只有一种可行方案且是由 k 这个人来完成的 \\ 0 & 有多种可行方案(即可行方案数 \gt 1) \end{cases} fi,j= 1k0不可行只有一种可行方案且是由k这个人来完成的有多种可行方案(即可行方案数>1

转移为:(这只是一个大概的)( A < = B A <= B A<=B A A A B B B 转移得到)
f i , j < = f i − 1 , k f_{i,j} <= f_{i-1,k} fi,j<=fi1,k

具体的看代码。 时间复杂度为 O ( T r ∑ l ) O(T r \sum l) O(Trl)

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5,maxr=105,maxc=2e5+5;
int f[maxr][maxc];
vector<int>vct[maxn];
int main(){
    ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int T; cin>>T;
	while(T--){
		int n,K,q; cin>>n>>K>>q;
		int manum=0;
		for(int i=1;i<=n;i++){
			int len; cin>>len;
			for(int j=1;j<=len;j++){
				int x; cin>>x;
				vct[i].push_back(x);
				manum=max(manum,x);
			}
		}//f[i][j]:在第 i 轮游戏中,以数字 j 为结尾是否可行(三种情况如下) 
		for(int i=0;i<=100;i++)    
			for(int j=1;j<=manum;j++)
				f[i][j]=-1;//(1) -1:不可行
		f[0][1]=0;
		for(int i=1;i<=100;i++)
			for(int j=1;j<=n;j++){
				int lst=-1;
				for(int k=0;k<vct[j].size();k++){
					if(k>=K&&lst<=k-K) lst=-1;
					int wd=vct[j][k];
					if(lst!=-1){
						if(f[i][wd]==-1) f[i][wd]=j;//(2) j:只有一种可行方案且是由 j 这个人来完成的  
						else if(f[i][wd]!=j) f[i][wd]=0;//(3) 0:有多种可行方案 
					}
					if(f[i-1][wd]!=-1&&f[i-1][wd]!=j) lst=k;//lst:上一个能被转移的数的下标 
				}
			}
		while(q--){
			int r,c; cin>>r>>c;
			cout<<(f[r][c]==-1?0:1)<<"\n";
		}
		for(int i=1;i<=n;i++)
			vct[i].clear();//多测要清空!!!!!! 
	} 
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2245624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visual Studio 圈复杂度评估

VisualStudio自带的有工具 之后就可以看到分析结果

MySQL UPDATE语句执行链路解析

文章目录 引言1. 总览&#xff1a;UPDATE语句的执行链路2. 客户端发起请求2.1 SQL请求的形成2.2 MySQL通信协议 3. 连接器模块3.1 连接管3.2 会话上下文 4. SQL解析器4.1 语法解析4.2 语法错误处理 5. 查询优化器5.1 查询优化的核心概念5.2 优化器生成执行计划的步骤5.3 优化器…

.net6.0(.net Core)读取 appsettings.json 配置文件

① 新项目中创建名为 appsettings.json 的 json文件&#xff0c;内容为&#xff1a; {//数据库连接字符串:"ConnectionString": {"DBconn": "server127.0.0.1;databasedb;uidsa;pwd123456;Timeout600;EncryptTrue;TrustServerCertificateTrue;"…

[CISCN 2019初赛]Love Math 详细题解

知识点: 数学函数转换字符串 GET传参外部赋值 eval()函数解析执行命令 PHP动态调用函数名 源码: <?php error_reporting(0); //听说你很喜欢数学,不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (…

湛江市社保卡申领指南:手机获取电子照片回执单号

在湛江市&#xff0c;社保卡的申领流程已经实现了数字化&#xff0c;为市民带来了极大的便利。特别是通过手机获取数码照片回执单号&#xff0c;这一环节更是简化了申领过程。今天&#xff0c;我们将详细介绍如何不去照相馆&#xff0c;利用手机来获取数码照片回执单号&#xf…

第27天 安全开发-PHP应用TP 框架路由访问对象操作内置过滤绕过核心漏洞

时间轴 演示案例 TP 框架-开发-配置架构&路由&MVC 模型 TP 框架-安全-不安全写法&版本过滤绕过 TP 框架-开发-配置架构&路由&MVC 模型 参考&#xff1a; https://www.kancloud.cn/manual/thinkphp5_1 1、配置架构-导入使用 去thinkphp官网可以看到&…

【自动驾驶】数据集合集!

本文将为您介绍经典、热门的数据集&#xff0c;希望对您在选择适合的数据集时有所帮助。 1 Automatic-driving-Test 更新时间&#xff1a;2024-07-26 访问地址: GitHub 描述&#xff1a; 该模型使用 ultralytics yolo v8 和 deepsort 方法来检测车道与车轮的碰撞并跟踪车辆。…

Leetcode 完全二叉树的节点个数

不讲武德的解法 java 实现 class Solution {public int countNodes(TreeNode root) {if(root null) return 0;return countNodes(root.left) countNodes(root.right) 1;} }根据完全二叉树和满二叉树的性质做 class Solution {public int countNodes(TreeNode root) {if (r…

力扣面试题 - 24 插入

题目&#xff1a; 给定两个整型数字 N 与 M&#xff0c;以及表示比特位置的 i 与 j&#xff08;i < j&#xff0c;且从 0 位开始计算&#xff09;。 编写一种方法&#xff0c;使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域&#xff0c;不足之处用 0 补齐…

Elasticsearch 中的热点以及如何使用 AutoOps 解决它们

作者&#xff1a;来自 Elastic Sachin Frayne 探索 Elasticsearch 中的热点以及如何使用 AutoOps 解决它。 Elasticsearch 集群中出现热点的方式有很多种。有些我们可以控制&#xff0c;比如吵闹的邻居&#xff0c;有些我们控制得较差&#xff0c;比如 Elasticsearch 中的分片分…

Matlab多输入单输出之倾斜手写数字识别

本文主要介绍使用matlab构建多输入单输出的网络架构&#xff0c;来实现倾斜的手写数字识别&#xff0c;使用concatenationLayer来拼接特征&#xff0c;实现网络输入多个特征。 1.加载训练数据 加载数据&#xff1a;手写数字的图像、真实数字标签和数字顺时针旋转的角度。 lo…

Nacos实现IP动态黑白名单过滤

一些恶意用户&#xff08;可能是黑客、爬虫、DDoS 攻击者&#xff09;可能频繁请求服务器资源&#xff0c;导致资源占用过高。因此我们需要一定的手段实时阻止可疑或恶意的用户&#xff0c;减少攻击风险。 本次练习使用到的是Nacos配合布隆过滤器实现动态IP黑白名单过滤 文章…

如何在Word文件中设置水印以及如何禁止修改水印

在日常办公和学习中&#xff0c;我们经常需要在Word文档中设置水印&#xff0c;以保护文件的版权或标明文件的机密性。水印可以是文字形式&#xff0c;也可以是图片形式&#xff0c;能够灵活地适应不同的需求。但仅仅设置水印是不够的&#xff0c;有时我们还需要确保水印不被随…

测试工程师如何在面试中脱颖而出

目录 1.平时工作中是怎么去测的&#xff1f; 2.B/S架构和C/S架构区别 3.B/S架构的系统从哪些点去测&#xff1f; 4.你为什么能够做测试这一行&#xff1f;&#xff08;根据个人情况分析理解&#xff09; 5.你认为测试的目的是什么&#xff1f; 6.软件测试的流程&#xff…

jenkins的安装(War包安装)

‌Jenkins是一个开源的持续集成工具&#xff0c;基于Java开发&#xff0c;主要用于监控持续的软件版本发布和测试项目。‌ 它提供了一个开放易用的平台&#xff0c;使软件项目能够实现持续集成。Jenkins的功能包括持续的软件版本发布和测试项目&#xff0c;以及监控外部调用执行…

无线感知会议系列【15】DPSense-2

接&#xff1a; 无线感知会议系列【15】DPSense-1 目录&#xff1a; 实验 讨论 结论 附录 一 实验 在本节中&#xff0c;我们通过全面的实验验证了所提出的DPSense系统的有效性。首先&#xff0c;我们将我们的方法与三种最先进的技术进行了比较。然后&#xff0c…

AI编程入门指南002:API、数据库和应用部署

进阶概念教程&#xff1a;API、数据库和应用部署 在学习了编程的基础概念后&#xff0c;我们将进入更高级的内容。本文将详细介绍API、数据库和应用部署三个进阶概念&#xff0c;并通过丰富的示例和形象的说明帮助你更好地理解这些内容。 1. API&#xff08;应用程序接口&#…

Docker3:docker基础1

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

《Django 5 By Example》阅读笔记:p645-p650

《Django 5 By Example》学习第8天&#xff0c;p645-p650总结&#xff0c;总计6页。 一、技术总结 1.django-rest-framework (1)serializer p648, Serializer: Provides serialization for normal Python class instances。Serializer又细分为Serializer, ModelSerializer,…

【机器学习】回归模型(线性回归+逻辑回归)原理详解

线性回归 Linear Regression 1 概述 线性回归类似高中的线性规划题目。线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合&#xff08;加减乘除&#xff09;起来&#xff0c;得到的结果和目标接近。 线性回归分为一元线性回归和多元线性回归。 2 一元线…