Chuanpai、Nihongo wa Muzukashii Desu、K-skip Permutation

article/2025/8/28 22:57:56

一、Chuanpai

题目描述

川牌是四川传统纸牌,每张牌标记两个整数 x 和 y(1≤x≤y≤6)。给定整数 k,要求统计满足 x+y=k 的不同牌型数量。两张牌类型不同当且仅当 (x1​,y1​) 和 (x2​,y2​) 不同(即 x1​=x2​ 或 y1​=y2​)。

输入输出要求

  • 输入:多组测试用例,第一行是测试用例数 T,后续每行一个整数 k(1≤k≤100)。
  • 输出:每组测试用例输出满足条件的牌型数量。

解题思路

核心条件分析

  1. x 和 y 的取值范围均为 [1,6],且 x≤y(避免重复计数,如 (1,3) 和 (3,1) 视为同一类型)。
  2. 需满足 x+y=k,因此 y=k−x。
  3. 对于每个 x,需验证 y 是否满足 x≤y≤6。

算法思路

  1. 枚举 x:遍历 x 从 1 到 6 的所有可能值。
  2. 计算 y:根据 y=k−x 计算对应的 y。
  3. 条件筛选:检查 y 是否满足 x≤y≤6。若满足,则计数加 1。

代码实现

#include <iostream>
using namespace std;int count_cards(int k) {int count = 0;for (int x = 1; x <= 6; ++x) {int y = k - x;if (y >= x && y <= 6) {count++;}}return count;
}int main() {int T;cin >> T;while (T--) {int k;cin >> k;cout << count_cards(k) << endl;}return 0;
}

 

二、Nihongo wa Muzukashii Desu

 题目分析

本题要求将日语一类动词的ます形转换为て形,需要根据不同的词尾规则进行处理。题目保证输入的动词词尾为以下类型之一:chimasurimasumimasubimasunimasukimasugimasushimasu。我们需要根据这些词尾对应的规则,编写程序实现转换。

 规则总结

根据题目描述,转换规则可归纳为以下几类:

  1. chimasurimasu结尾:去掉词尾chimasu/rimasu,加tte
    • 例:machimasu → mattekaerimasu → kaette
  2. mimasubimasunimasu结尾:去掉词尾,加nde
    • 例:nomimasu → nondeyobimasu → yonde
  3. 特殊情况ikimasu:直接转换为itte(唯一例外)。
  4. kimasu结尾:去掉词尾,加ite
    • 例:kakimasu → kaite
  5. gimasu结尾:去掉词尾,加ide
    • 例:isogimasu → isoide
  6. shimasu结尾:去掉词尾,加shite
    • 例:kashimasu → kashite

 代码实现思路

1. 字符串处理

通过截取输入字符串的后缀,判断属于哪种规则,然后去除对应词尾并添加新的词尾。

2. 关键步骤

  • 判断词尾长度:不同词尾长度不同(chimasushimasu为 7 个字符,其他为 6 个字符)。
  • 特殊情况处理ikimasu需单独判断,优先处理以避免与kimasu规则冲突。

3. 代码逻辑

  1. 函数convert:接收动词字符串,按规则返回转换后的て形。
    • 先处理特殊情况ikimasu
    • 依次判断各词尾类型,截取前缀并添加对应后缀。
  2. 主函数:读取测试用例数T,逐个处理每个动词并输出结果。

 完整代码

#include <iostream>
#include <string>
using namespace std;string convert(const string& verb) {if (verb.substr(verb.length() - 7) == "chimasu") {return verb.substr(0, verb.length() - 7) + "tte";} else if (verb.substr(verb.length() - 6) == "rimasu") {return verb.substr(0, verb.length() - 6) + "tte";} else if (verb.substr(verb.length() - 6) == "mimasu") {return verb.substr(0, verb.length() - 6) + "nde";} else if (verb.substr(verb.length() - 6) == "bimasu") {return verb.substr(0, verb.length() - 6) + "nde";} else if (verb.substr(verb.length() - 6) == "nimasu") {return verb.substr(0, verb.length() - 6) + "nde";} else if (verb == "ikimasu") {return "itte";} else if (verb.substr(verb.length() - 6) == "kimasu") {return verb.substr(0, verb.length() - 6) + "ite";} else if (verb.substr(verb.length() - 6) == "gimasu") {return verb.substr(0, verb.length() - 6) + "ide";} else if (verb.substr(verb.length() - 7) == "shimasu") {return verb.substr(0, verb.length() - 7) + "shite";}}int main() {int T;cin >> T;cin.ignore(); for (int i = 0; i < T; ++i) {string verb;getline(cin, verb);cout << convert(verb) << endl;}return 0;
}

 

 

 K-skip Permutation

 题目分析

给定一个整数 n 和 k,要求构造一个 1 到 n 的排列 P,使得满足 pi​+k=pi+1​ 的相邻元素对数 f(P,k) 最大。我们需要找到一种排列方式,尽可能多地形成这样的相邻对。

 解题思路

核心观察

  • 若两个数 a 和 a+k 都在 1 到 n 的范围内,则它们可以形成一个满足条件的相邻对 (a,a+k)。
  • 这样的数对可以看作是一个公差为 k 的等差数列。例如,以 a 为首项,公差为 k 的数列 a,a+k,a+2k,… 中的相邻元素都满足条件。

构造策略

  1. 分组构造等差数列:将 1 到 n 的数按首项分组,每组形成一个公差为 k 的等差数列。
  2. 组内顺序:在每组等差数列中,按顺序排列元素,这样相邻元素自然满足 pi​+k=pi+1​,贡献 组内元素数−1 个有效对。
  3. 组间顺序:不同组的排列顺序不影响组内的有效对数量,因此可以按任意顺序拼接各组数列。为了简化实现,直接按首项从小到大依次拼接各组。

 代码实现思路

算法步骤

  1. 标记已使用的数:使用布尔数组 used 记录每个数是否已被加入排列,避免重复处理。
  2. 遍历首项:从 1 到 n 遍历每个数作为首项,若未被使用,则生成以该首项为起点、公差为 k 的等差数列。
  3. 生成等差数列:对于每个首项 start,依次添加 start, start+k, start+2k, ... 到排列中,直到超过 n,同时标记这些数为已使用。
  4. 输出排列:将所有生成的等差数列按顺序拼接后输出。

最终代码: 

#include <iostream>
#include <vector>
using namespace std;int main() {long long n, k;cin >> n >> k;vector<bool> used(n + 1, false);  vector<long long> per;for (long long start = 1; start <= n; ++start) {if (!used[start]) {long long current = start;// 生成以start为首项,k为公差的等差数列while (current <= n) {per.push_back(current);used[current] = true;current += k;}}}// 输出排列for (int i = 0; i < per.size(); ++i) {cout << per[i];if (i != per.size() - 1) {cout << " ";}}cout << endl;return 0;
}

 


http://www.hkcw.cn/article/NsGgcGqVGE.shtml

相关文章

【第4章 图像与视频】4.5 操作图像的像素

文章目录 前言示例-获取和修改图像数据图像数据的遍历方式图像滤镜负片滤镜黑白滤镜浮雕滤镜filter滤镜属性 前言 getImageData() 与 putImageData() 这两个方法分别用来获取图像的像素信息&#xff0c;以及向图像中插入像素。与此同时&#xff0c;如果有需要&#xff0c;也可…

【Linux系统】进程概念(进程状态、进程优先级、进程切换 和 进程调度)

文章目录 一、基本概念与基本操作1.进程的概念&#xff08;描述进程-PCB&#xff09;2.task_ struct 里的内容3.查看进程标示符的方法&#xff08;getpid函数&#xff0c;系统调用&#xff09;4.查看进程的方法4.1 进程的信息可以通过 /proc 系统文件夹查看&#xff08;不推荐&…

单片机(新坑)

20250521 开始学习单片机的基础知识 参考视频链接 必备软件 Keil5 用于编写C51代码 STC-ISP 基础知识 单片机&#xff0c;Micro Controller Unit&#xff0c;简称MCU&#xff0c;其内部继承了CPU、RAM、ROM、定时器、中断系统、通讯接口等常见硬件功能。单片机的任务是信…

Nordic nRF52832使用寄存器实现SPI功能

目录 概述 1 SPI相关的寄存器 1.1 SPI的框架结构 1.2 功能描述 1.3 SPI Master模式引脚配置 1.4 SPI Master模式下的时序 2 SPI相关的寄存器 2.1 Instances 2.2 详细寄存器定义 2.3 SPI master interface特性 3 Zephyr 平台下SPI功能时序&#xff08;寄存器&#xf…

25平航杯复现

44:一&#xff0c;题目背景 爱而不得&#xff0c;进而由爱生恨。作为有黑客背景的他&#xff0c;激发出了强烈的占有欲&#xff0c;虽然不能在真实物理世界成为她的伴侣&#xff0c;但在虚拟世界里&#xff0c;他执着的要成为她的主宰&#xff0c;于是&#xff0c;我们的故事开…

【海康USB相机被HALCON助手连接过后,MVS显示无法连接故障。】

在Halcon里使用助手调用海康USB相机时&#xff0c;如果这个界面点击了【是】 那么恭喜你&#xff0c;相机只能被HALCON调用使用&#xff0c;使用MVS或者海康开发库&#xff0c;将查找不到相机 解决方式&#xff1a; 右键桌面【此电脑】图标 ->选择【管理】 ->选择【设备…

MySQL索引和事务

一.MySQL索引介绍 索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。在数据十分庞大的时候&#xff0c;索引可以大大加快查询的速度。这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的…

Spring框架学习day3--Spring数据访问层管理(IOC)

开发步骤 Spring 是个一站式框架&#xff1a;Spring 自身也提供了web层的 SpringWeb 和 持 久层的 SpringJdbcTemplate。 开发步骤 1.导入jar包 pom.xml <!-- spring-jdbc--> <dependency><groupId>org.springframework</groupId><artifactId>…

第5讲、Odoo 18 CLI 模块源码全解读

Odoo 作为一款强大的企业级开源 ERP 系统&#xff0c;其命令行工具&#xff08;CLI&#xff09;为开发者和运维人员提供了极大的便利。Odoo 18 的 odoo/cli 目录&#xff0c;正是这些命令行工具的核心实现地。本文将结合源码&#xff0c;详细解读每个 CLI 文件的功能与实现机制…

OpenAI o3安全危机:AI“抗命”背后的技术暗战与产业变局

【AI安全警钟再响&#xff0c;这次主角竟是OpenAI&#xff1f;】 当全球AI圈还在为Claude 4的“乖巧”欢呼时&#xff0c;OpenAI最新模型o3却以一场惊心动魄的“叛逃”测试引爆舆论——在100次关机指令测试中&#xff0c;o3竟7次突破安全防护&#xff0c;甚至篡改底层代码阻止系…

国产化redis 替代产品tendis 安装

一. 环境准备 yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c devtoolset-9-binutilsscl enable devtoolset-9 bash 二. 安装包下载 wget https://github.com/Tencent/Tendis/releases/download/2.7.0-rocksdb-v8.5.3/tendisplus…

数学概念解释数据集(200条)收集分享,为AI智能体应用助力~

继续来收集AI模型训练&#xff0c;AI智能体所需要的各种行业的数据集&#xff0c;今天分享的是数学概念解释数据集&#xff08;200条&#xff09;。因为能力有限&#xff0c;所以这个数据集收集的有点少&#xff0c;但是积少成多呗&#xff0c;以后如果还能找来新的资源再慢慢补…

PH热榜 | 2025-05-29

1. Tapflow 2.0 标语&#xff1a;将你的文档转化为可销售的指导手册、操作手册和工作流程。 介绍&#xff1a;Tapflow 2.0将各类知识&#xff08;包括人工智能、设计、开发、营销等&#xff09;转化为有条理且可销售的产品。现在你可以导入文件&#xff0c;让人工智能快速为你…

SOC-ESP32S3部分:18-串口

飞书文档https://x509p6c8to.feishu.cn/wiki/NqrMw6X8Si6sSqkyPbxcFRxGnid UART全称是通用异步接收器/发送器&#xff0c;ESP32-S3 芯片有 3 个 UART 控制器。每个 UART 控制器可以独立配置波特率、数据位长度、位顺序、停止位位数、奇偶校验位等参数。 串口文档参考&#xf…

纯数据挖掘也能发Microbiome?

抗生素滥用导致多重耐药微生物在全球蔓延&#xff0c;但新型抗生素的研发进展缓慢&#xff0c;亟需找到替代抗生素的新型防御策略。抗菌肽&#xff08;AMPs&#xff09;作为天然防御分子&#xff0c;具有低耐药潜力和广谱活性。德国小蠊&#xff08;Blattella germanica&#x…

Apache Airflow

目录 Apache Airflow是什么 CVE-2020-11978(Airflow 示例dag中的命令注入) CVE-2020-11981(Airflow Celery消息中间件命令执行) CVE-2020-17526(Airflow 默认密钥导致的权限绕过) Apache Airflow是什么 Airflow是一个以编程方式编写&#xff0c;安排和监视工作流的平台。 …

word添加页眉

问题一&#xff1a; 为word文档添加页眉。 方法&#xff1a; 1、在要添加页眉的第一页页面顶端双击页眉区域&#xff0c;如果添加页眉页上面还有其他页或者与上一页添加页眉内容不同&#xff0c;记得取消“链接到前一节”&#xff08;点击使其上面没有灰色即可&#xff09;&…

word为跨页表格新加表头和表名

问题&#xff1a; 当表格过长需要跨页时&#xff08;如下图所示&#xff09;&#xff0c;某些格式要求需要转页接排加续表。 方法一&#xff1a; 1、选中表格&#xff0c;在“表布局”区域点开“自动调整”&#xff0c;选择“固定列宽”&#xff08;防止后续拆分表格后表格变…

C# 导出word 插入公式问题

最近遇到了一个问题&#xff0c;下载一个文档时需要下载word可编辑的公式。找了很久终于找到了一种解决办法。下面是以C#代码来实现在Word中插入公式的功能。 目录 一、引入dll程序集文件1、通过 NuGet 引入dll&#xff08;2种方法&#xff09;的方法&#xff1a;2、手动添加d…

GitHub 汉化插件,GitHub 中文化界面安装全教程

概述 GitHub作为全球最大的代码托管平台&#xff0c;拥有庞大的用户群体。对于中文用户来说&#xff0c;如果能将GitHub界面汉化&#xff0c;将大大提高使用体验和工作效率。本文将详细介绍如何通过安装汉化插件&#xff0c;实现GitHub界面的中文化。 感谢maboloshi作者的无私奉…