首页 > 其他分享 >Codeforces Round 887 (Div 2) C. Ntarsis' Set

Codeforces Round 887 (Div 2) C. Ntarsis' Set

时间:2023-07-24 11:44:40浏览次数:52  
标签:Ntarsis Set 887 int Codeforces Div now Round

Ntarsis' Set

题意是给你n个数,每次按照顺序删除位于a[i]位置的这n个数,问k次后最小的是多少

参考这位大佬的题解Codeforces Round 887 (Div 2)A~C - 知乎 (zhihu.com)

结合一个官方题解,进行一次操作后,由于前面删掉i个数,a[i]到a[i+1]间所有数的排名都要-=i,那么在a[i]到a[i+1]之间的数j,只要原先没有被删掉,一次操作后的j+i(如果k+i<a[i+1])一定就会取代上一次j的位置保留下来。换言之,此时位于空位j上的数值变成了j+i。当j+i>=a[i+1]时,说明[j+1,a[i+1]]之间的数都会被删掉,那么只能考虑大于a[i+1]的数值在一次操作后会来到空位j上。对于一个此时在a[i+1]后a[i+2]前的位置的一个数,一次操作后,它的位置-=(i+1),也就是说,当j+i>=a[i+1]时,此时在j+i+1位的数下一次会来到j这个位。也就是此时的更新操作是j=j+i+1。

所有综上,我们可以用一个变量now来表示此时的最小值,a[i]<now<a[i+1],当now+i<a[i+1]时,操作一次,此时的最小值变成now+i;直到now+i>=a[i+1]时,我们就让i增加,直到now+i<a[i+1],此时now再更新即可,now更新k次。

a[1]如果不是1的话无论k是多少最后答案都是1.

而当不操作的时候,最小值是1,now初值赋为1即可

自己代码遇到有几个语法上的坑,关闭流同步后尽量都用cout,少用puts scanf等,GCC17及以后就不要用register了

 

查看代码
 #pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<iostream>
#define int long long
using namespace std;
int a[200005];
void solve()
{
	int n,kk;
	cin>>n>>kk;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	a[n+1]=1e18;
	if(a[1]>1)
	{
		cout<<1<<endl;
		return;
	}
	int now=1;
	for(int i=2;i<=n+1;i++)
	{
		while(now+i-1<a[i])
		{
			now+=(i-1);
			kk--;
			if(kk==0)
			break;
		}
		if(kk==0)break;
	}
	cout<<now<<endl;
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}

 

标签:Ntarsis,Set,887,int,Codeforces,Div,now,Round
From: https://www.cnblogs.com/qbning/p/17576833.html

相关文章

  • Delphi7 TClientDataSet作为内存数据集合使用
    IDE:Delphi7使用TClientDataSet控件在Delphi中保存内存数据集合(相当于Java中的List<Map>),代码片段:procedureTMainForm.btnExportClick(Sender:TObject);tmpCds:TClientDataSet;tmpStr:string;begin//TClientDataSet作为内存数据集合使用//*********************......
  • 117.STL中的multiset
    117.STL中的multiset1.multiset的介绍1.multiset是按照特定顺序存储元素的容器,其中元素是可以重复的2.在multiset在,元素的value也会识别它组成的键值对,multiset元素的值不能在容器中进行修改,但可以插入和删除3.在内部,multiset按照特定的严格弱排序准则进行排序4.multiset容......
  • 116.STL中的set
    116.STL中的set1.set的简介set的中文译为集合,知名见其意,因此set容器也就具有集合的属性啦!而集合这个概念大家应该上数学课应该都是学过的哈,集合它具有确定性、互异性、无序性。当然我们这里重点记住它的互异性就OK了,那么什么是互异性呢?就是说一个集合里边是不会出现两个甚至以上......
  • Python | setup.py详解
    setup.py是Python中用于构建、打包和发布第三方库的脚本文件。它通常位于Python库的根目录下,并包含了一些元数据和配置信息,用于指定库的名称、版本、作者、依赖项等。setup.py的内容通常包括以下部分:导入setuptools模块或distutils模块。setuptools是distutils的增强版,提供了更......
  • ARC125F Tree Degree Subset Sum
    感觉挺不错的一道题,不过课上pb好像没有讲。显然树的具体形态对题目影响不大,那么我们知道\(\sum\limits_{i=1}^nd_i=2n-2\)即可扔掉树的条件。即:给定\(n\)个\(d_i\),和为\(2n-2\),求\((x,y)\)满足\(0\lex\len\)且\(\existsS\subseteq\{1,2,\cdotsn\},|S|=x,\sum......
  • c语言当中的COORD ,GetStdHandle(),SetConsoleCursorPosition(),以及避免清屏和反复刷新
    这是WindowsAPI定义的结构体类型COORD来表示字符在控制台屏幕上的坐标,结构体类型COORD定义为:typedefstruct_COORD{SHORTx;SHORTy;}COORD;使用WindowsAPI GetStdHandle()从一个特定的标准设备获取表示设备的句柄(用来标识不同设备的一个数值),SetConsoleCursor......
  • mongodb upset
    MongoDB的upsert操作详解简介在MongoDB中,upsert是一种特殊的操作,用于在执行update操作时,如果查询条件不存在,则插入一条新的文档。本文将为刚入行的小白开发者介绍如何实现MongoDB的upsert操作。流程图下面是实现MongoDBupsert的基本流程图:步骤描述1创建MongoDB连接......
  • Map,Set
    MapMap对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者基本类型)都可以作为一个键或一个值。//创建Map只能通过newconstmyMap=newMap([[1,'one'],[2,'two'],[3,'three'],]);constmap1=newMap();map1.set('a',1);map1.set('b......
  • file /usr/share/mysql/charsets/macroman.xml from install of MySQL-server-5.6
    MySQL服务器和字符集在使用MySQL数据库时,字符集是一个非常重要的概念。它决定了数据库中存储的数据如何表示和解释。MySQL支持多种字符集,每个字符集都有自己的编码方式和规则。在安装MySQL服务器时,我们可能会遇到如下错误提示信息:file/usr/share/mysql/charsets/macroma......
  • set ff=unix
    今天在公司部署项目的时候,执行启动脚本的时候,出现,不能识别这个命令的错误。很纳闷于是寻求同事的帮助,同事说,你需要设置一下这个启动脚本的换行符格式就好了。具体解决办法:使用vi编辑器,执行virun.sh然后输入:setff=unix,使用Unix换行符。然后将run.sh启动脚本中涉及到......