第二周周赛很光荣的0封了,说明进步空间很大,以下是本周题目题解
派队接水
思路:定义结构体后排序,然后枚举
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
struct ren
{
int xuhao;
int shijian;
};
bool cmp (ren a,ren b)
{
return a.shijian<b.shijian;
}
ren a[1005];
int main ()
{
int n;
cin>>n;
for (int i=1;i<=n;i++)
{
cin>>a[i].shijian;
a[i].xuhao=i;
}
sort (a,a+n+1,cmp);
int N=n;
int b[1005];
double sum=0;
for (int i=1;i<=n;i++)
{
N--;
b[i]=a[i].xuhao;
sum=sum+a[i].shijian*N;
cout<<b[i]<<" ";
}
cout<<endl;
cout<<fixed<<setprecision(2)<<sum/n;
return 0;
}
线段覆盖
思路:同定义结构体后排序,贪心枚举
#include <iostream>
#include <algorithm>
using namespace std;
struct bisai
{
int a;
int b;
};
bool cmp(bisai a,bisai b)
{
return a.b<b.b;
}
bisai s[1000000];
int main ()
{
int n;
cin>>n;
for (int i=0;i<n;i++)
{
cin>>s[i].a>>s[i].b;
}
sort (s,s+n,cmp);
int l,r;
l=0;
r=0;
int ans=0;
for (int i=0;i<=n;i++)
{
if(s[i].a>=r)
{
l=s[i].a;
r=s[i].b;
ans++;
}
}
cout<<ans;
return 0;
}
均分纸牌
思路:查看题解获得了平均数的思路
#include <iostream>
using namespace std;
int main ()
{
int n;
cin>>n;
int a[100];
int sum=0;
for (int i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
}
int are;
are=sum/n;
for (int i=0;i<n;i++)
{
a[i]-=are;
}
int ans=0;
for (int i=0;i<n;i++)
{
if (a[i]!=0)
{
a[i+1]+=a[i];
a[i]=0;
ans++;
}
}
cout<<ans;
return 0;
}
独木桥
思路:贪心,最大最小分别定义函数
#include<bits/stdc++.h>
using namespace std;
int n,m,minx,maxx;
int max(const int &a,const int &b){
return a>b?a:b;
}
int min(const int &a,const int &b){
return a<b?a:b;
}
int main(){
scanf("%d%d",&n,&m);
int x;
maxx=0;
minx=0;
for(int i=1;i<=m;i++){
scanf("%d",&x);
maxx=max(maxx,max(x,n-x+1));
minx=max(minx,min(x,n-x+1));
}
cout<<minx<<" "<<maxx;
return 0;
}