题解:CF1956A Nene's Game

cf1956a,nene,game · 浏览次数 : 0

小编点评

这道题的思路是用向量模拟删除过程,首先创建一个向量存储所有人的下标,然后当可以删除时,遍历vector中的元素,并将其从vector中删除。 以下是代码中注释的详细解释: ```cpp #include <bits/stdc++.h>using namespace std; int k,q,a[105]; void solve(){\ int n;\tcin>>n;\tvector<int> ve;\tfor(int i=1;i<=n;i++) ve.push_back(i); //把每个人放到向量里面 while(!ve.size()<a[1]) //当还可以删除时 { int cnt=1;\t /* * cnt的作用\t * 1. 把下标从0开始的ve与下标从1开始的a[]关联起来 * 2. vector的erase会自动补齐空位 * 如果没有cnt,第二次删除的则是错误的位置 * 所以用cnt统计目前删除了多少个数 * * cnt为什么初始是1? 请看第一条 */ for(int i=1;i<=k;i++) { if(a[i]<=ve.size()) //当还可以删除时 { ve.erase(ve.begin()+a[i]-cnt); //则删除,此时用上了cnt cnt++;//已删除+1 } } cout<<ve.size()<<\" \";} } void Solve(){\tcin>>k>>q;\tfor(int i=1;i<=k;i++) cin>>a[i];\tsort(a+1,a+1+k); //排序是为了方便做这个 while(!ve.size()<a[1])\twhile(q--) solve();//q次询问 } int main(){\tcin>>t;\twhile(t--) Solve());//t组数据 return 0;} ``` 这道题虽然难度有点,但通过对代码的分析,我们可以理解其思路和实现方式。

正文

这道题其实挺有意思,多测里面还套了个多测。

思路就是用向量模拟删除过程,具体请看代码里的注释。

#include <bits/stdc++.h>
using namespace std;
int k,q,a[105];
void solve()
{
	int n;
	cin>>n;
	vector<int> ve;
	for(int i=1;i<=n;i++) ve.push_back(i);//把每个人放到向量里面
	while(!ve.size()<a[1]) //当还可以删除时
	{
		int cnt=1;
		/*
		 * cnt的作用
		 * 1. 把下标从0开始的ve与下标从1开始的a[]关联起来
		 * 2. vector的erase会自动补齐空位
		 * 如果没有cnt,第二次删除的则是错误的位置
		 * 所以用cnt统计目前删除了多少个数
		 * 
		 * (cnt为什么初始是1? 请看第一条)
		 *
		*/
		for(int i=1;i<=k;i++) 
			if(a[i]<=ve.size()) //当还可以删除时
			{
				ve.erase(ve.begin()+a[i]-cnt); //则删除,此时用上了cnt
				cnt++;//已删除+1
			}
	}
	cout<<ve.size()<<" ";
}
void Solve()
{
	cin>>k>>q;
	for(int i=1;i<=k;i++) cin>>a[i];
	sort(a+1,a+1+k); //排序是为了方便做这个 while(!ve.size()<a[1])
	while(q--) solve();//q次询问
	cout<<endl;
}
int main()
{
	int t;
	cin>>t;
	while(t--) Solve();//t组数据
	return 0;
}

与题解:CF1956A Nene's Game相似的内容:

题解:CF1956A Nene's Game

这道题其实挺有意思,多测里面还套了个多测。 思路就是用向量模拟删除过程,具体请看代码里的注释。 #include using namespace std; int k,q,a[105]; void solve() { int n; cin>>n; vector

洛谷题解 | P1051 谁拿了最多奖学金

​目录 题目描述 输入格式 输出格式 输入输出样例 提示 题目思路 AC代码 题目描述 某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同: 1. 院士奖学金,每人 8000 元,期末平均成绩高于 80 分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可

洛谷题解 | P5660 数字游戏

​ 目录 题目描述 输入格式 输出格式 输入输出样例 说明/提示 题目简化 题目思路 AC代码 题目描述 小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 1。 注意:01 字符串为每一个字符是 0 或者 1 的字符串,如“101

洛谷题解 | P1046 陶陶摘苹果

​ 目录 题目描述 输入格式 输出格式 输入输出样例 说明/提示 题目思路 AC代码 题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 现在已知 10 个

洛谷题解 | AT_abc321_c Primes on Interval

目录题目翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2样例 #3样例输入 #3样例输出 #3题目简化题目思路AC代码 题目翻译 【题目描述】 你决定用素数定理来做一个调查. 众所周知, 素数又被称为质数,其含义就是除了数字一和本身之外不能被其

AcWing 第102场周赛 题解

第一次ak周赛,写篇题解纪念一下 第一题 给定两个长度为 n n n 的整数序列 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1​,a2​,…,an​ 以及 b 1 , b 2 , … , b n b_1,b_2,…,b_n b1​,b2​,…,bn​。 设 A = a 1

CF题解合集

CF 比赛题解合集 \(\downarrow 2023.09.04\) CF1952, CF1954 1952 A. Ntarsis' Set 有一个集合,初始状态里面有数字 \(1\)、\(2\)、\(3\)、\(4\)、\(5\)、......、\(10^{1000}\)。 现在给你一个长度为

set 容器详解 附大根堆题解

声明 本文中题解部分内容大部分转载自 @sonnety 的这篇博客中,本文为为方便复习而写的结论类文章,读者可自行跳转至原文处阅读。 PART 1 set 什么是 set ——来源cppreference 简言之,它就是一种存进去就可以自动按升序排列的特殊容器,通常的 set 还具有自动去重的功能。

XYCTF pwn部分题解 (部分题目详解)

hello_world(签到) 思路:✅ 这道题就是利用printf函数泄露libc的基地址,然后再次进行栈溢出通过system,/bin/sh来获取shell wp: invisible_flag 思路:✅ 题目提示orw,那我们先看看是否开了沙盒 那么是开了沙盒的,试试orw读取flag 虽然保

str 学数学 题解

挺有意思的一道数学题。