2018年南海区小学生程序设计竞赛详细答案

作者 : 开心源码 本文共2232个字,预计阅读时间需要6分钟 发布时间: 2022-05-12 共203人阅读

1 魔术卡片

AC代码

#include <iostream>#include <cstdio>using namespace std;int main(){    freopen("hide.in", "r", stdin);    freopen("hide.out", "w", stdout);        int a1, b1, a2, b2;    cin >> a1 >> b1 >> a2 >> b2;        if (a1 < b1)    {        swap(a1, b1);    }        if (a2 < b2)    {        swap(a2, b2);    }        if((a1 >= a2 && b1 >= b2) || (a1 <= a2 && b1 <= b2))    {        cout << 1;    }    else    {        cout << 2;    }        return 0;}

2 均分计算

AC代码

#include <iostream>#include <algorithm>#include <cstdio>using namespace std;int main(int argc, const char * argv[]){    freopen("average.in", "r", stdin);    freopen("average.out", "w", stdout);    int n;    cin >> n;    int a[n];    double score, sum = 0;    for (int i = 0; i < n; i++)    {        cin >> a[i];        sum += a[i];    }    sort(a, a + n);    sum -= (a[0] + a[n - 1]);    score = sum / (n - 2);    printf("%.2f", score);    return 0;}

3 出发能量

AC代码

#include<cstdio>int main(){    freopen("start.in", "r", stdin);    freopen("start.out", "w", stdout);        int n;    scanf("%d", &n);        int sum = 0;    int ans = 0;    for(int i = 0; i < n; i++)    {        int x;        scanf("%d", &x);        sum += x;        if(sum < 0)        {            ans += (-1 * sum);            sum = 0;        }    }        printf("%d", ans);        return 0;}

4 衰减

AC代码

#include<bits/stdc++.h>using namespace std;int n, ans[10], ansN, tot;void dfs(int num){    if(1 == num)    {        tot++;        printf("%d-", n);        for(int i=1; i<ansN; i++)        {            printf("%d-", ans[i]);        }        printf("%d\n", ans[ansN]);        return;    }    num >>= 1;    for(int i=1; i<=num; i++)    {        ans[++ansN] = i;        dfs(i);        --ansN;    }}int main(){    freopen("down.in","r",stdin);    freopen("down.out","w",stdout);    scanf("%d", &n);    dfs(n);    printf("%d", tot);    return 0;}

5 拆除桥墩

AC代码

#include<bits/stdc++.h>using namespace std;const int MAXINF=0x7fffffff;const int MININF=0x80000000;int n,m,l,d[50002];bool check(int dmin){    int s=0, tot=0;    for(int i=1; i<=n; i++)    {        s += d[i];        if(s < dmin)        {            tot++;        }        else        {            s = 0;        }    }    return (tot <= m);}int main(){    freopen("remove.in", "r", stdin);    freopen("remove.out", "w", stdout);    cin >> l >> n >> m;    for(int i=1; i<=n; i++)    {        cin >> d[i];    }    d[n+1] = l-d[n];    for(int i=n; i>=2; i--)    {        d[i] = d[i] - d[i-1];    }    n++;    int left = MAXINF, right = 0;    for(int i=1; i<=n; i++)    {        left = min(left, d[i]);        right += d[i];    }    while(left + 1 < right)    {        int mid = (left + right) >> 1;        if(check(mid))        {            left = mid;        }        else        {            right = mid;        }    }    cout << left;    return 0;}

6 卜克游戏

AC代码#include<bits/stdc++.h>using namespace std;int f[3002],P[3002],S[3002],n;int main(){    freopen("poker.in","r",stdin);    freopen("poker.out","w",stdout);    cin>>n;    for(int i=1;i<=n;i++)    {        cin>>P[i];    }    for(int i=1;i<=n;i++)    {        cin>>S[i];        S[i]+=S[i-1];    }    for(int i=1;i<=n;i++)    {        f[i]=f[i-1];        for(int j=i-1;j>=1;j--)        {            if(P[i]==P[j])            {                f[i]=max(f[i],S[i]-S[j-1]+f[j-1]);            }        }    }    cout<<f[n];    return 0;}

少儿编程、信息学竞赛咨询请加微信307591841或者QQ307591841

信息学竞赛公众号.jpg

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 2018年南海区小学生程序设计竞赛详细答案

发表回复