不会auto,map。活该这两题写这么长(牛客周赛 Round 29的C,D)

题目链接https://ac.nowcoder.com/acm/contest/73422
C 小红的小小红

  • 初看这题我以为需要把所以的hong和xiao进行配对,其实不需要这么多,只需要一个xiaohong就可以了。所以我们需要的就是先输出xiaohong在把剩下的字符输出就可以了。但如何将剩下的字符输出呢。那我们得用到桶排序(计数排序),将字符的数量存起来。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int tong[26]={0};
int main()
{
	string s;
	string temp="xiaohong";
	cin>>s;
	for(int i=0;i<temp.size();i++)
	{
		tong[temp[i]-'a']--;
	}
	for(int i=0;i<s.size();i++)
	{
		tong[s[i]-'a']++;
	}
	cout<<temp;
	for(int i=0;i<26;i++)
	{
		while(tong[i]--)
		{
			cout<<char('a'+i);
		}
	}
	cout<<endl;
	return 0;
}

D小红的中位数

  • 中位数的概念应该都懂(不懂上百度),我上张图来讲清楚这题的解题思路。当n为偶数时我们把这个序列分成两边(左右),不管左边怎么删中位数的永远都是n/2,右边怎么删中位数永远都是n/2-1。奇数的时候就有特殊情况,就i=n/2的时候特判一下。所以每个值都能对应这一个中位数。我们定义一个结构体,存上它的值,下标,中位数。sort一下依次输出。讲了这么多我觉得好绕啊!!!!

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
struct sub{
	int x;
	double y;
	int id;
};
sub a[N];
bool cmp(sub a,sub b)
{
	return a.x<b.x;
}
bool cmp1(sub a,sub b)
{
	return a.id<b.id;
}
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i].x;
		a[i].id=i;
	}
	sort(a,a+n,cmp);
	if(n%2==1){
		for(int i=0;i<n/2;i++)
		{
			a[i].y=a[n/2].x+a[n/2+1].x;
		}
		a[n/2].y=a[n/2-1].x+a[n/2+1].x;
		for(int i=n/2+1;i<n;i++)
		{
			a[i].y=a[n/2-1].x+a[n/2].x;
		}
		sort(a,a+n,cmp1);
		for(int i=0;i<n;i++)
		{
			printf("%0.1lf\n",a[i].y/2.0);
		}
	}
	else{
		for(int i=0;i<n/2;i++)
		{
			a[i].y=a[n/2].x;
		}
		for(int i=n/2;i<n;i++)
		{
			a[i].y=a[n/2-1].x;
		}
		sort(a,a+n,cmp1);
	    for(int i=0;i<n;i++)
	    { 
	     	printf("%0.1lf\n",a[i].y/1.0);
	    }
	}
	return 0;
}
posted on 2024-01-22 10:51  咋瓦鲁多_食我压路机  阅读(26)  评论(1)    收藏  举报