第i题好像有问题,大部分人都没过

部分人先判断有没有长度为k的不上升字串

如果有,不变

没有就直接排序最后k个元素,这样过不了,5,3 3 2 3 2 1

很多人跑出了3 2 1 2 3,正确的是3 2 2 3 1

看了第一名的代码启发,可以处理重复数据,用了multiset

#include <bits/stdc++.h>
using namespace std;

#define ll long long

bitset<200005> able;

int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int n,k;
	cin>>n>>k;
	int arr[n];
	for(auto &i:arr)cin>>i;
	if(k == 1){
		for(auto &i:arr)cout<<i<<' ';
		return 0;
	}
	int len = 1;
	for(int i = 1;i<n;i++){
		if(arr[i]>arr[i-1])len++;
		else len = 1;
		if(len>=k){
			for(auto &j:arr)cout<<j<<' ';cout<<'\n';
			return 0;
		}
	}
	multiset<int> st;
	for(int i = 0;i<k;i++)st.insert(arr[n-1-i]);
	int p = n-k;
	for(int i = n-k-1;i>=0;i--){
		st.extract(arr[i+k]);
		//for(auto &j:st)cout<<j<<' ';
		if(arr[i]<=*st.begin())p = i; //可以从这个点开始排
		//cout << "i = " << i  << " p = " << p << endl;
		if(arr[i]>=arr[i+1])break; // 从i开始排序更有性价比
		st.insert(arr[i]);
	}
	//cout << p << endl;
	sort(arr+p,arr+p+k);
	for(auto &i:arr)cout<<i<<' ';
	return 0;
}

全部评论
排列是从1~n,每个只出现一次,但我确实发现不对的地方就是 8 4 3 2 8 4 5 7 6 1 对4~7位排序答案是 3 2 8 4 5 6 7 1 但代码跑出来都是 3 2 8 4 1 5 6 7  明显是第一种方式才是对的,但输出都是第二种,我一开始就想到这个样例,所以觉得没有连续大于等于k的上升子序列,不可能是最后k个数排列,但过题人数越来越多,逐渐离谱,试了一下,真就过去了。结果就是要么数据不够强,要么就是出题方代码搞错了,好像还是atc的一个原题
2 回复 分享
发布于 2023-11-04 13:39 江西
这场比赛很多原题,第一名有些题目都是直接抄的
1 回复 分享
发布于 2023-11-04 13:41 江西

相关推荐

06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务