题目链接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;
}


浙公网安备 33010602011771号