河南萌新联赛第一场:河南农业大学

J-合唱比赛

本题思路:n个评委和你给选手评分,你评的分可能是最高分也可能是最低分,当你的评分为最高分是就在n个评委中去掉一个最低分,当你的评分为最低分是就在n个评委中去掉一个最高分。所以就是n个评委所评总分分别减去最低分和最高分出去n-1来求范围。

#include<bits/stdc++.h>
 using namespace std;
 int main()
 {
 int n;
     cin>>n;
     int i;
     double  a[n];
     int max1=-1,min1=111;
     double sum=0;
     for(i=0;i<n;i++)
     {
         cin>>a[i];
         if(a[i]>max1)
         max1=a[i];
         if(min1>a[i])
         min1=a[i];
         sum=sum+a[i];
     }
     double sum1=(sum-max1)/(n-1);
     double sum2=(sum-min1)/(n-1);
     printf("%.6lf %.6lf",sum1,sum2);
     return 0;
 }
 

E-动物朋友

本题思路:利用队列来求。在队列中的元素总和大于目标值的话就把对列首元素弹出,总值减去该元素,在队列中的元素总和小于目标值的话就继续往队列里添加元素,总值加上该元素,总值等于目标值的话cont++;

 #include<bits/stdc++.h>
 using namespace std;
 int main()
 {
     int n,m;
     cin>>n>>m;
     queue<int> k;
     int sum=0;
     int cont=0;
     while(n--)
     {
         int a;
         cin>>a;
         sum=sum+a;
         k.push(a);
         if(sum<m)
         {
             continue;
         }
         else
         if(sum>m) {
             while(sum>m)
             {
             int c=k.front();
             sum=sum-c;
             k.pop();
             if(sum==m)
             {
                 cont++;
                 break;
             }
             }
         }
         else if(sum==m)
         {
             cont++;
         }
     }
     cout<<cont;
     return 0;
 }

G-Reverse

本题思路:统计相互挨着1的个数,让最大的两个相加。

#include<bits/stdc++.h>
 using namespace std;
 int b[1000000];
 bool cmp(int a,int b)
 {
     return a>b;
 }
 int main()
 {
     int n;
     cin>>n;
     int c=0;
     int i=0;
     while(n--)
     {
         char a;
         cin>>a;
         if(a=='1')
         {
             c++;
         } else {
             b[i]=c;
             c=0;
             i++;
         }
     }
     b[i]=c;
     i++;
     sort(b,b+i,cmp);
     int sum=b[0]+b[1];
     cout<<sum;
     return 0;
 }

K-以撒和隐藏房间

本题思路:对每个为0的位置进行统计,统计该位置周围1的个数和2的个数,如果1的个数为3并且2的个数为0的话就是隐藏房间。

 #include<bits/stdc++.h>
 using namespace std;
 int n,m;
struct dian{
    char point;
    int a1;
    int a2;
}d[1002][1002];
 int main()
 {
     int cont=0;
     cin>>n>>m;
    int i,j;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cin>>d[i][j].point;
            d[i][j].a1=0;
            d[i][j].a2=0;
        }
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(d[i-1][j].point=='1'&&(i-1)>=1&&j>=1&&(i-1)<=n&&j<=m)
            d[i][j].a1++;
            if(d[i-1][j].point=='2'&&(i-1)>=1&&j>=1&&(i-1)<=n&&j<=m)
            d[i][j].a2++;
            
            if(d[i+1][j].point=='1'&&(i+1)>=1&&j>=1&&(i+1)<=n&&j<=m)
            d[i][j].a1++;
            if(d[i+1][j].point=='2'&&(i+1)>=1&&j>=1&&(i+1)<=n&&j<=m)
            d[i][j].a2++;
            
            if(d[i][j-1].point=='1'&&(j-1)>=1&&i>=1&&(j-1)<=n&&i<=m)
            d[i][j].a1++;
            if(d[i][j-1].point=='2'&&(j-1)>=1&&i>=1&&(j-1)<=n&&i<=m)
            d[i][j].a2++;
            
            if(d[i][j+1].point=='1'&&(j+1)>=1&&i>=1&&(j+1)<=n&&i<=m)
            d[i][j].a1++;
            if(d[i][j+1].point=='2'&&(j+1)>=1&&i>=1&&(j+1)<=n&&i<=m)
            d[i][j].a2++;
            
            if(d[i][j].a1==3&&d[i][j].point=='0'&&d[i][j].a2==0)
            cont++;
        }
    }
    if(cont==0)
    {
        cout<<"NO"<<endl;
    }
    else {
        cout<<"YES"<<endl<<cont<<endl;
    }
     return 0;
 }

F-松鼠排序

本题思路:把抢位的元素换走。


#include <bits/stdc++.h>
using namespace std;

const int N = 1e5+10;
int n,m;
int a[N];

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        while(a[i]!=i)
        {
            swap(a[i],a[a[i]]);
            ans++;
        }
    }
    cout<<ans<<endl;
}

A-你也喜欢数学吗

本题思路:按照题目给的公式套。

#include<iostream>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll k;
ll qmi(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1) res=(res*a)%mod;
        b>>=1;
        a=(a*a)%mod;
    }
    return res;
}
int main(){
    cin>>k;
    k%=mod;
    ll sum=0;
    sum=(k*(k+1)%mod*(2*k+1)%mod*qmi(6,mod-2)%mod+k*(k+1)/2)%mod*qmi(2,mod-2)%mod;
    cout<<sum<<endl;
    return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值