首页 > 其他分享 >CSP-J 前三题详解

CSP-J 前三题详解

时间:2023-10-30 20:22:42浏览次数:35  
标签:texttt 拿走 前三题 详解 苹果 ans tans CSP

没写完。先补会儿文化课作业,等会再回来继续写。

T1 P9748 [CSP-J 2023] 小苹果

令苹果数量为 \(\texttt{n}\)。
容易发现,拿苹果就是每三个一组,取第一个。
需要注意的是,如果以三个一组来考虑拿苹果,最后几个苹果不满三个时也应该算一个组,第一个也要拿走。
形式化的,即当 \(\texttt{n} \bmod 3 \ne 0\) 时,\(\texttt{n} / 3 + 1\) 这个苹果也要被拿走。

第一个小问题通过模拟题意即可解决,判断当前所有苹果是不是刚好可以分成三个三个一组,可以的话就拿走 \(\texttt{n} / 3\) 个,
否则拿走 \(\texttt{n} / 3 + 1\) 个苹果。
形式化的,即为判定 \(\texttt{n} \bmod 3 = 0\) 是否为真。

那么同时,拿走最后一个苹果的判断方式便十分显然了:
关注最后的这一组,如果拿走的这个苹果正是序列最后一个苹果,那么第二个小问题便迎刃而解。
即:每次拿走判断 $\texttt{n} =1 $ 是否成立,成立则最后一组被拿走的便是整个序列的最后一个苹果,即开始时编号为 \(\texttt{n}\) 的苹果。

代码实现:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
 
int main(){
	cin>>n;
	ll ans=0; // ans 表示这队苹果要用多少次才可以取完。
	ll tans=0; // tans 表示最后一个苹果,即编号为 n 的 苹果,是什么时候拿走的。
	while(n){
		if(n%3==1 && tans==0) { tans=ans+1; } // 先判断本轮是否可以拿走第 n 个苹果,如果可以,那么拿走他的应该就是这一次。
                                              // 需要注意的是,由于本轮还未开始统计,所以要用 ans+1 来维护 tans 。
                                              // 另外需要注意的是,最后一个取走了会有前一个苹果成为最后一个,所以要特判是否已经被取走来锁定答案。		
			ans++;	
			n-=ceil(1.0*n/3); // 向上取整,规避判断 n%3==0 是否成立。需要注意把 n 换为浮点数避免整型计算直接给小数部分干没了。
	}
		cout<<ans<<" "<<tans<<endl;
	

	return 0;
}

T2 P9749 [CSP-J 2023] 公路

一开始的想法是用单调栈维护每一个加油站之后最便宜的加油站是谁,这样在每个加油站贪心的加好刚刚够的油开到更便宜的加油站即可。
但是我的代码能力太弱了不知道哪里打挂了。
而且这个方法也不够优雅。

于是下面介绍一个一轮过得答案的方法。

标签:texttt,拿走,前三题,详解,苹果,ans,tans,CSP
From: https://www.cnblogs.com/ChillLee/p/17798688.html

相关文章

  • 关于STM32芯片类型的详解
    关于STM32芯片类型的详解对于STM32芯片类型英文缩写的详解及相关型号: CL - Connect Line(互联型):包含STM32F105和STM32F107两个系列,该系列的芯片侧重于提供丰富的外设和连接选项,以满足各种连接性要求的应用场景。VL - Value Line(超值型):包含stm32f100系列,该系列的芯片是为......
  • 周藤 CSP-2023游记
    Day-inf~Day-2基本上是考试状态,每天我都是自己取随机题目做,不过也保证了落实量每场模拟赛发挥基本上是不是特别稳定,考得好的时候AK了,考不好的时候只有300分,反正同届差不多第一吧。。。不过还被几个人诅咒爆零了,不过没事,一交解千愁/seDay-1教练说了考试注意事项,然后就去娱......
  • 嵌入式Linux中内存管理详解分析
    Linux中内存管理内存管理的主要工作就是对物理内存进行组织,然后对物理内存的分配和回收。但是Linux引入了虚拟地址的概念。虚拟地址的作用如果用户进程直接操作物理地址会有以下的坏处:1、用户进程可以直接操作内核对应的内存,破坏内核运行。2、用户进程也会破坏其他进程的运行CPU......
  • 【CV】图像分割详解!
    图像分割是计算机视觉研究中的一个经典难题,已经成为图像理解领域关注的一个热点,图像分割是图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,同时也是图像处理中最困难的问题之一。所谓图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分成若干个互不相交......
  • MySQL系列:binlog日志详解(参数、操作、GTID、优化、故障演练)
    目录简介作用系统参数--log_bin--server_id--binlog_format--sync-binlog(双一标准)--gtid-mode(gtid)--enforce-gtid-consistency(gtid)--expire-logs-day(优化参数)--binlog_cache_size(优化参数)--max_binlog_cache_size(优化参数)--max_binlog_size(优化参数)sql_log_bin日志操作开启日......
  • docker指令详解
    Docker指令详解1.生命周期管理run创建并运行容器,格式dockerrun[OPTIONS]image[COMMAND][ARG...],参数说明dockerrun[options]image[command][arg...]-d,--detach#后台运行-it,--interacticetty#交互终端形式运行-p,--publishlist#指定端口-v,--vo......
  • 数据结构:栈与队列-详解循环队栈
    《详解循环队栈》目录:循环队列的定义及其特点循环队列的实现完整Demo运行截图小结参考文献一、循环队列的定义及其特点队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表......
  • 一文详解如何从 Oracle 迁移数据到 DolphinDB
    Oracle是一个广泛使用的关系型数据库管理系统,它支持ACID事务处理,具有强大的安全性和可靠性,因此被广泛应用于各种企业级应用程序。但是,随着数据规模的增加和业务需求的变化,Oracle的一些限制和缺点也逐渐暴露出来。例如,Oracle的许可证费用昂贵,而且对于海量数据的处理能力较弱。......
  • 算法:实现中序遍历(3种方法图例详解,小白也能看懂)
     中序遍历:左->中 ->右练习地址:力扣(LeetCode)官网-全球极客挚爱的技术成长平台1、递归法 #Definitionforabinarytreenode.classTreeNode(object):def__init__(self,val=0,left=None,right=None):self.val=valself.left=left......
  • 神经网络基础篇:详解导数(Derivatives)
    导数一个函数\(f(a)=3a\),它是一条直线。下面来简单理解下导数。让看看函数中几个点,假定\(a=2\),那么\(f(a)\)是\(a\)的3倍等于6,也就是说如果\(a=2\),那么函数\(f(a)=6\)。假定稍微改变一点点\(a\)的值,只增加一点,变为2.001,这时\(a\)将向右做微小的移动。0.001的差别实在是太小了,不......