第1题 count 查看测评数据信息
输入n个数,n<=500000,每个数不超过10000,求最多连续出现了多少个相同的数。
输入/输出例子1
输入:
10
5 5 3 3 3 4 5 6 7 8
输出:
3
样例解释
无
#include<bits/stdc++.h>
using namespace std;
int n,a[500005],maxx=0,s=1,t;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
a[n+1]=a[n]+1;
for(int i=1;i<=n;i++)
{
if(a[i]==a[i+1])
{
s++;
}
else
{
if(s>maxx)maxx=s;
s=1;
}
}
cout<<maxx;
return 0;
}
第1题 USAICO 查看测评数据信息
FJ的农场举行了异一场USA奶牛奥林匹克竞赛.N(1 <= N <= 100,000; N 是一个奇数)只奶牛都已经获得了一个整数分数S(0 <= S <= 10,000).
FJ必须统计这些分数以便指导他们.帮帮他吧~~给出一个列表,计算最小值、最大值、中间数、众数。中间值是一个值M,至少一半的数<=M,至少一半的数>=M。众数是指出现次数最多的一个数。FJ知道分数里面只有一个众数。
输入格式
第1行:一个整数N。
第2..N+1行:每一行有一个整数,是一只奶牛的分数
输出格式
四个用空格隔开的整数:最小值、最大值、中间数、众数
输入/输出例子1
输入:
9
1
3
15
3
5
6
7
8
3
输出:
1 15 5 3
样例解释
9只奶牛的分数,在1到15之间,最小值是 1;最大值是 15;中间值是 5;众数是 3,出现了3次
#include<bits/stdc++.h>
using namespace std;
int n,a[100005],maxx=0,s=1,maxi=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);
cout<<a[1]<<" "<<a[n]<<" "<<a[n/2+1]<<" ";
a[n+1]=a[n]+1;
for(int i=1;i<=n;i++)
{
if(a[i]==a[i+1]) s++;
else
{
if(s>maxx) maxx=s,maxi=a[i];
s=1;
}
}
cout<<maxi;
return 0;
}
第2题 房间数量 查看测评数据信息
有n头奶牛,第i头奶牛的身高是h[i]。身高相同的所有奶牛都住在同一个房间。问需要多少个房间才能安排好所有奶牛的住宿。
输入格式
接下来有n行,第i行是一个正整数h[i]。
60%的数据: 1 <= n <= 1000, 1 <= h[i] <= 1000000。
80%的数据:1 <= n <= 100000, 1 <= h[i] <= 1000000。
100%的数据:1 <= n <= 100000, 1 <= h[i] <= 2000000000。
输出格式
一个整数。
输入/输出例子1
输入:
5
10 30 10 20 30
输出:
3
#include<bits/stdc++.h>
using namespace std;
int n,a[100005],s=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);
a[n+1]=a[n]+1;
for(int i=1;i<=n;i++)
{
if(a[i]!=a[i+1]) s++;
}
cout<<s;
return 0;
}
第3题 火柴 查看测评数据信息
有N根火柴,第i根火柴的长度是Li。小明很喜欢正方形,所以小明希望用这些火柴拼出尽量多的正方形,但要同时满足如下条件:
1、一根火柴最多只能用在一个正方形中。
2、组成正方形的四根火柴,长度必须都相同。
给出N根火柴的长度,你的任务是计算:最多可以拼出多少个正方形?
输入格式
第一行,一个整数N。
第二行,N个整数,第i个整数是Li。
对于60%的数据, 4 <= N <= 50, 1 <= Li <= 1000。
对于100的数据,4 <= N <= 5000,1 <= Li <= 1000000000。
输出格式
一个整数,表示最多能拼出的正方形的数量
输入/输出例子1
输入:
7
1 1 2 2 1 1 2
输出:
1
输入/输出例子2
输入:
20
1 2 3 4 1 2 3 4 1 2 3 1 2 3 4 1 2 3 3 3
输出:
3
#include<bits/stdc++.h>
using namespace std;
int n,a[5005],maxx=0,s=1;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
a[n+1]=a[n]+1;
for(int i=1;i<=n;i++)
{
if(a[i]==a[i+1])
{
s++;
}
else
{
maxx=maxx+s/4;
s=1;
}
}
cout<<maxx;
return 0;
}
第4题 众数 查看测评数据信息
小明最近在上数学课,老师给小明布置了个作业:在 n个数里找出所有的众数。
众数的定义是这样的:在所有数当中出现次数最多的数被称为众数。并且根据定义,众 数有可能有多个。
你能解决这个问题吗?
输入格式
第一行一个整数n。
第二行有n个整数,ai表示第i个数。
40%的数据,1<=n<=400
100%的数据,1<=n<=1000000,1<=ai<=1000000000
输出格式
输出一行,包括一个整数k,表示众数的个数。
接下来一行包括k 个整数,每个整数都表示一个众数,并且从小到大输出。
输入/输出例子1
输入:
10
3 3 3 2 3 1 2 2 1 2
输出:
2
2 3
#include<bits/stdc++.h>
using namespace std;
map<int,int>person;
int M[1000000];
int t;
int main(){
int n,id=0,Max=-100;
cin>>n;
for(int i=1;i<=n;i++)
{
int s;
cin>>s;
person[s]++;
}
map<int,int>::iterator it;
for(it=person.begin();it!=person.end();it++)
{
if(it->second>Max)
{
Max=it->second;
}
}
for(it=person.begin();it!=person.end();it++)
{
if(it->second==Max)
{
id++;
}
}
cout<<id<<endl;
for(it=person.begin();it!=person.end();it++)
{
if(it->second==Max)
{
cout<<it->first<<" ";
}
}
return 0;
}
第1题 序列问题二 查看测评数据信息
作为信息学高手,桐桐和晶晶数学也相当厉害,他们非常喜欢研究数列。一次桐桐写下一个数列,是 N 个不相同的正整数。晶晶想把它们重新排列,使整列满足条件:除第一个和最后一个数外,每个数都比它相邻的左右两个数小 或 比它相邻的左右两个数大。
当然可能满足上面的条件的方案有多种,你要输出“字典序最小”的一个。对于两个数列A和B,从第一项开始一个一个比较,出现第1次不同的项时,此项小的数列为字典序小些。
输入格式
第一行:一个整数 N ( N<= 100 ),表示数列有N个整数。
第二行:N个不同的正整数,每个整数在 [ 1 , 1,000,000,000 ] 范围内。
输出格式
只一行,有N个整数,晶晶变化后的数列。
输入/输出例子1
输入:
4
1 5 10 4
输出:
1 5 4 10
这题我不会,哪位大佬帮我?
感谢感谢!