首页 > 其他分享 >模拟六补题报告

模拟六补题报告

时间:2024-10-10 22:55:14浏览次数:3  
标签:小可 题目 报告 int long 补题 闹钟 区间 模拟

S15192

一、题目报告

         考试中第一题AC,第二、三、四题0分;比赛后全部AK。

二、赛中概况 

        第一题看完题后觉得很简单,写了一下,成功AC。

        第二、三、四题看完题有思路但不会写代码,0分。

三、解题报告

T1.挑选苹果(apple)

题目情况 

        比赛时AC

题目描述

       小可手里有n个苹果,大小为a​1​​,a​2​​,⋯,a​n​​。小可希望留给爸爸妈妈最大的k个苹果,剩下的自己吃掉。

        请问,小可自己吃掉的苹果的大小总和是多少?

题目解析

       注意,k是给爸爸妈妈的苹果数量,剩下的n-k个才是小可自己吃的。
排序,把最小的n-k个加起来即可,注意开long long

AC代码

#include<bits/stdc++.h>
using namespace std;
const int m=1e5+5;
int n,k,a[m];
long long sum; 
int main() {
//	freopen("apple.in","r",stdin);
//	freopen("apple.out","w",stdout);
	scanf("%d%d",&n,&k);
	for(int i=1; i<=n; i++) scanf("%d",&a[i]);
	sort(a+1,a+1+n);
	for(int i=1; i<=n-k; i++) sum+=a[i];
	printf("%lld",sum);//输出 
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}

T2.谁是胜者(winner)

题目情况 

        0分

题目描述

        现在有n个人进行决战!他们每个人都有一个战斗力,他们排成一排,战斗力分别为a​1​​,a​2​​,⋯,a​n​​。

        保证n一定是2的幂。每轮战斗,都会把所有人分成人数相同的两部分,然后进行战斗。也就是说,假设现在有x人,左侧x/2个人是左侧团队,右侧x/2个人是右侧团队。然后这两个团队进行决斗,

        决斗的规则是:一个团队的战斗力是这个团队所有人的战斗力的总和。如果两个团队的战斗力相同,那么如果是第奇数轮战斗,那么左侧的团队胜利。如果是第偶数轮战斗,那么右侧的团队胜利。否则战斗力大的团队获胜,战斗力小的团队会失败。失败的团队的所有人都会退场。如果最后只剩一个人,那么这个人就是冠军。

        请你得出最后胜利的人的战斗力。

题目解析

        模拟,始终维护一个区间[L, R] ,表示当前要进行战斗的区间。
        如果左侧团队胜利,记录左侧区间是多少,否则记录右侧区间是多少。注意记录这是第几轮战斗,用来判断相等的情况。

AC代码

#include<bits/stdc++.h>
using namespace std;
int n,a[100005];
long long sum[100005];
int main() {
//	freopen("winner.in","r",stdin);
//	freopen("winner.out","w",stdout);
	scanf("%d",&n);
	for(int i=1; i<=n; i++) {//输入的同时求出前n项和 前缀和 
		scanf("%d",&a[i]);
		sum[i]=sum[i-1]+a[i];
	}
	int L=1,R=n,cnt=0;
	while(L<R) {//二分 
		cnt++;//统计轮数,题目相等时判断的要求 
		int mid=(L+R)/2;//取中点,因为n是2的幂,所以肯定能等分 
		ll left=sum[mid]-sum[L-1],right=sum[R]-sum[mid];//左边的区域L~mid 右边的区域mid+1~R 
		if(left<right) L=mid+1;//右边获胜,则继续看右边的情况 
		else if(left>right) R=mid;//左边获胜,则继续看左边的情况 
		else {//相等 
			if(cnt%2==0) L=mid+1;//偶数轮右边获胜 
			else R=mid;//奇数轮左边获胜 
		}
	}
	printf("%d",a[R]);//输出最后获胜的人的编号 
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}

T3.合并序列(merge)

题目情况 

        0分

题目描述

        小可有一个长度为n的序列a​1​​,a​2​​,⋯,a​n​​,序列的所有元素的值要么是0,要么是1。

        规定,一个区间内的众数是区间内出现次数最多的元素。如果0和1的出现次数相同,那么众数是0。

        现在我们有一种操作:选择一个区间[l,r],将区间内的所有数字全部删除,然后在这个区间原本所在位置插入这个区间的众数。例如,对于序列[0,1,1,0,1,1,0],选择区间[2,5]进行操作,那么这个序列会变成[0,1,1,0]。

        请问,经过若干轮操作后,序列有没有可能只剩一个数字1?

题目解析

        可以想到,如果有连续的0,我们把连续的0全部合并成一个0是最优的情况。
剩下的序列中,如果1的数量小于等于0的数量,那么就不可以合并成一个1。统计0和1的数量即可。

AC代码

#include<bits/stdc++.h>
using namespace std;
const int m=2e5+5;
int t,n;
char s[m];
int main() {
//	freopen("merge.in","r",stdin);
//	freopen("merge.out","w",stdout);
	scanf("%d",&t);
	while(t--) {
		scanf("%d%s",&n,s+1);//下标从1开始存储,否则需要考虑越界情况 
		int cnt0=0,cnt1=0;
		for(int i=1; i<=n; i++) {
			if(s[i]=='1') cnt1++;
			//这里为什么连续的0只认为是一个0呢,因为要尽可能的减少0的出现次数
			//连续的0可以通过操作变为一个0 
			if(s[i]=='0'&&s[i-1]!='0') cnt0++;
		}
		if(cnt1>cnt0) printf("Yes\n");//总1的数量多,则可以整体变为众数1 
		else printf("No\n");//否则则不可以 
	}
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}

T4.邪恶大马猴(monkey)

题目情况 

        0分

题目描述

       小可最近总是睡不着觉。在经历了若干天长时间的学习之后,小可终于感受到困意,打算睡一个好觉。

        但是有一只邪恶的大马猴不想小可睡觉!

        小可现在的睡意值是m,大马猴设置了n个闹钟即将响起。第i个闹钟的吵闹值是a​i​​。吵闹值会影响小可的睡眠,如果小可的睡意值减少到0或者负数,那么小可就会醒过来。

        现在,你可以帮助小可,在闹钟响起之前关闭一些闹钟。你可以选择一个区间[L,R],关掉这个区间内的所有的闹钟。这样,区间[1,L−1]和[R+1,n]的闹钟依旧会响起,但是这两个区间之间就有了一个空白时间,这两个区间并不连续

对于一个连续的区间[L,R],如果这个区间的闹钟全部响起,第一个闹钟会让小可的睡意值减少a​L​​,第二个闹钟会让小可的睡意值减少2×a​L+1​​,第三个闹钟会让小可的睡意值减少3×a​L+2​​,以此类推。这样,小可的睡意值减少的总量就是1×a​L​​+2×a​L+1​​+3×a​L+2​​+⋯+(R−L+1)×a​R​​。

现在,请你选择一个最短的区间[L,R],关掉其中的闹钟,并且能让小可不被吵醒。请输出这个区间的长度。区间长度最小是1。

AC代码

#include<bits/stdc++.h>
using namespace std;
const int m=1e5+5;
int n,m,a[m];
long long sum1[m],sum2[m];
long long getsum(int L,int R) {//求一个区间的吵闹值,套公式 
	if(L>R) return 0;
	return (sum2[R]-sum2[L-1])-(L-1long long)*(sum1[R]-sum1[L-1]);
	//1ll等价于把1转换成Long long类型防止数据与楚 
}
bool check(int x) {
	for(int i=1;i+x-1<=n;i++){//关闭的是i~j长度为x的区域 
		int j=i+x-1;
		if(getsum(1,i-1)+getsum(j+1,n)<m){
			return true;
		} 
	} 
	return false;
}
int main() {
//	freopen("monkey.in","r",stdin);
//	freopen("monkey.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(long long i=1; i<=n; i++) {
	//对于区间L~R上的闹钟造成的总吵闹值
	//1*a[L]+2*a[L+1]+....(R-L+1)*a[R]
	//公式:i-(L~R) (i-L+1)*a[i]求和
	// i-(L~R)-> i*a[i]-(L-1)*a[i]
		scanf("%d",&a[i]);
		sum1[i]=sum1[i-1]+a[i];//普通的前缀和 
		sum2[i]=sum2[i-1]+i*a[i];//i*a[i]的前缀和 
	}
	int L=1,R=n;//二分答案 满足条件的最小值,最小化答案 
	while(L<R) {
		int mid=L+R>>1;
		if(check(mid)) R=mid;//如果mid这个区间长度可以,则尝试更短 
		else L=mid+1;//否则加大长度 
	}
	printf("%d",R);//输出答案 
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}

2024/10/10

标签:小可,题目,报告,int,long,补题,闹钟,区间,模拟
From: https://blog.csdn.net/LXY130519/article/details/142833883

相关文章

  • 20222403 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容本周学习内容1.熟悉基本的汇编语言指令及其功能。2.掌握了栈与堆的概念及其在进程内存管理中的应用以及用户态与内核态的区别。3.熟练运用了Linux系统下的基本操作命令。2.实验过程任务一直接修改程序机器指令,改变程序执行流程下载并解压目标文件pwn1,然后拖入虚......
  • 20222428 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1本周学习内容1.1.1安全漏洞简介定义:系统的缺陷或不足。作用:网络攻击和防御的关键点。网络攻击:利用系统漏洞进行攻击。防御:提前发现漏洞并修复。exploit:完整的代码攻击。shellcode:不完整的代码攻击。PoC:验证是否存在漏洞。1.1.2缓冲区溢出的定义和原因......
  • selenium:ActionChains类模拟鼠标和键盘操作(6)
    selenium包中提供了ActionChains类,主要用于鼠标和键盘的一些操作,比如鼠标移动,鼠标按键,或者是悬停和拖放等;模拟键盘按键输入,比如按住control+C键等。使用时先导入该类:fromselenium.webdriverimportActionChainsActionChains类的方法介绍 ActionChains类常用方法函......
  • 基于django+vue+Vue歌曲发烧友网站【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在当今数字化时代,音乐已成为人们生活中不可或缺的一部分,它不仅能抒发情感,还能丰富我们的精神世界。随着互联网的迅猛发展,越来越多的人倾向......
  • 基于django+vue+Vue高校资产管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的快速发展,高校资产规模日益扩大,种类也日益繁多,包括教学设备、实验器材、图书资料、办公设施等。这些资产不仅是高校进行教学......
  • 基于django+vue+Vue高校招生管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,高等教育机构在招生管理过程中的信息化需求日益增强。传统的手工操作与纸质文档管理方式不仅效率低下,还容易出错,难......
  • C++——模拟实现list
    1.初步实现结点和链表namespacejxy{ template<classT> structlist_node { T_data; list_node<T>*_prev; list_node<T>*_next; list_node(constT&x=T()) :_data(x) ,_prev(nullptr) ,_next(nullptr) {} }; template<cla......
  • 【测试项目】——个人博客系统测试报告
    ......
  • 数据结构题解报告
    [GDOI2016]疯狂动物城对于大多树上区间问题往往加个树剖就能变成普通区间问题,只是说复杂度会加个\(log\),出题人这么做的理由可能是想锻炼一下评测姬吧选手的码力吧。而强制在线只需要可持久化数据结构即可。本题同理可视作区间问题用线段树维护,考虑推式子降次以便于维护\(ans......
  • 20222304 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1本周学习内容1)反汇编反汇编是指将计算机程序的机器代码转换回其相应的汇编代码的过程。在计算机编程和逆向工程领域中,反汇编是一种常见的技术,用于理解和分析二进制程序的功能和内部结构。通常情况下,程序员编写的源代码会被编译器转换成机器码,这是计算机可以直接......