SDU程序设计思维与实践 大模拟 Week10

2024-04-10 05:38

本文主要是介绍SDU程序设计思维与实践 大模拟 Week10,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SDU程序设计思维与实践 大模拟 Week10

  • A签到题
    • 题目
    • 题解
    • C++代码
  • B东东玩魔方
    • 题目
    • 题解
    • C++代码

A签到题

题目

题目
input&&output
input&&output
Sample

#input:
TSTTSS
#output:
4

题解

1.本题我们观察后会发现实际上就是从左往右不断记录S的数量当遇到变化时不断减S数量,直到再次变为S则剩余的数量即为最后需要长度的一部分,最后只要在结束后在加上一次S的数量就可以了
(由于 找的是 ST对因此可以这样做)

C++代码

#include<iostream>
#include<string>
using namespace std;
int numS = 0,numT = 0;
int sum = 0;
int main(){string s;cin>>s;for(int i=0;i<s.length();i++){if(s[i] == 'S'){numS++;sum+=numT;numT=0;}else{if(numS==0){numT++;}else{numS--;}}}sum+=numS;cout<<sum<<endl;return 0;
} 

B东东玩魔方

题目

题目
input&&output
inputoutput
Sample

#input:
4
1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6
6 6 6 6 1 1 1 1 2 2 2 2 3 3 3 3 5 5 5 5 4 4 4 4
1 4 1 4 2 1 2 1 3 2 3 2 4 3 4 3 5 5 5 5 6 6 6 6
1 3 1 3 2 4 2 4 3 1 3 1 4 2 4 2 5 5 5 5 6 6 6 6
#output:
YES
YES
YES
NO

题解

1.本题我没有调出来代码(细节处可能没注意到 )因此此处附上 助教提供的样例代码,我仅做分析
代码分析:
本题要求一次以内成功还原因此内含两种情况
1.本身已经还原
2.某一个面顺时针或逆时针旋转一次可以还原(逆时针相当于顺时针转三次)
3.在样例代码中 列出了上下左右四个面顺时针旋转一次的坐标变化
4.在turn函数中 根据 提供的索引旋转对应面
5.solve函数中 遍历了所有情况,细节转4次还原,要是我我肯定会开一个中间数组,但转四次实际上优于开中间数组(毕竟中间数组也要再拷贝到 操作数组,时间上差不多但中间数组占用了空间)

C++代码

代码源地址————侵删 嘿嘿

#include <stdio.h>
#include <string.h>
const int TURN[4][25] = {
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24}, // Origin
{0, 3, 1, 4, 2, 23, 21, 7, 8, 9, 10, 11, 12, 13, 14, 20, 18, 17, 5, 19, 6, 15, 22, 16, 24}, // Front Clockwisew 90°
{0, 21, 22, 3, 4, 5, 6, 7, 8, 9, 10, 18, 17, 15, 13, 16, 14, 1, 2, 19, 20, 12, 11, 23, 24}, // Up    Clockwisew 90°
{0, 13, 2, 15, 4, 1, 6, 3, 8, 5, 10, 7, 12, 9, 14, 11, 16, 19, 17, 20, 18, 21, 22, 23, 24}, // Left  Clockwisew 90°
};
int a[30], b[30];
bool judge()
{// 特判各面同色for(int i=0;i<6;i++)if (!(a[i*4+1]==a[i*4+2] && a[i*4+2]==a[i*4+3] && a[i*4+3]==a[i*4+4]))return false;return true;	
}
void turn(int t)
{// 指定面顺时针90转动一次for(int i=1;i<=24;i++) b[i] = a[TURN[t][i]];memcpy(a+1, b+1, sizeof(int)*24); // b->a 拷贝
}
bool solve()
{for(int i=1;i<=24;i++) scanf("%d",&a[i]);if (judge()) return true;for(int i=1;i<=3;i++){turn(i); if(judge()) return true;turn(i); turn(i); if(judge()) return true;turn(i); // 转回去}return false;
}
int main()
{int T; scanf("%d",&T);while(T--) printf(solve() ? "YES\n" : "NO\n");
}

这篇关于SDU程序设计思维与实践 大模拟 Week10的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/890189

相关文章

jdk1.8的Jenkins安装配置实践

《jdk1.8的Jenkins安装配置实践》Jenkins是一款流行的开源持续集成工具,支持自动构建、测试和部署,通过Jenkins,开发团队可以实现代码提交后自动进行构建、测试,并将构建结果分发到测... 目录Jenkins介绍Jenkins环境搭建Jenkins安装配置Jenkins插件安装Git安装配

SpringBoot的全局异常拦截实践过程

《SpringBoot的全局异常拦截实践过程》SpringBoot中使用@ControllerAdvice和@ExceptionHandler实现全局异常拦截,@RestControllerAdvic... 目录@RestControllerAdvice@ResponseStatus(...)@Except

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

MySQL存储过程实践(in、out、inout)

《MySQL存储过程实践(in、out、inout)》文章介绍了数据库中的存储过程,包括其定义、优缺点、性能调校与撰写,以及创建和调用方法,还详细说明了存储过程的参数类型,包括IN、OUT和INOUT... 目录简述存储过程存储过程的优缺点优点缺点存储过程的创建和调用mysql 存储过程中的关键语法案例存储

Java 的ArrayList集合底层实现与最佳实践

《Java的ArrayList集合底层实现与最佳实践》本文主要介绍了Java的ArrayList集合类的核心概念、底层实现、关键成员变量、初始化机制、容量演变、扩容机制、性能分析、核心方法源码解析、... 目录1. 核心概念与底层实现1.1 ArrayList 的本质1.1.1 底层数据结构JDK 1.7

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础