输入n个数,n<=500000,每个数不超过10000,求最多连续出现了多少个相同的数。
输入/输出例子1
输入:
10
5 5 3 3 3 4 5 6 7 8
输出:
3
样例解释
无
#include<bits/stdc++.h>
using namespace std;
long long n,a[500005],maxx=0,s=1,t;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
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;
}
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 main(){
int N;
cin>>N;
vector<int>scores;
for(int i=0;i<N;i++){
int score;
cin>>score;
scores.push_back(score);
}
int min_score=*min_element(scores.begin(),scores.end());
int max_score=*max_element(scores.begin(),scores.end());
sort(scores.begin(),scores.end());
int mid_score=scores[N/2];
unordered_map<int,int> count;
for(int score:scores){
count[score]++;
}
int mode=(-1);
int mode_count=0;
for(auto pair:count){
if(pair.second>mode_count){
mode_count=pair.second;
mode=pair.first;
}
}
cout<<min_score<<" "<<max_score<<" "<<mid_score<<" "<<mode<<endl;
return 0;
}
有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<iostream>
#include<unordered_set>
int main(){
int n;
std::cin>>n;
std::unordered_set<int> distinct_heights;
for(int i=0; i<n;++i) {
int height;
std::cin>>height;
distinct_heights.insert(height);
}
int num_rooms=distinct_heights.size();
std::cout<<num_rooms<<std::endl;
return 0;
}
有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 <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int countSquares(vector<int>& matches) {
unordered_map<int, int> matchCount;
for(int match : matches) {
matchCount[match]++;
}
int result=0;
for(auto&pair:matchCount) {
result+=pair.second/4;
}
return result;
}
int main(){
int n;
cin>>n;
vector<int> matches(n);
for(int i=0;i<n;i++) {
cin>>matches[i];
}
cout<<countSquares(matches)<<endl;
return 0;
}
小明最近在上数学课,老师给小明布置了个作业:在 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;
}
作为信息学高手,桐桐和晶晶数学也相当厉害,他们非常喜欢研究数列。一次桐桐写下一个数列,是 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
这题我不会,哪位大老板帮我?