人工智能教育协会—迎国庆程序设计比赛 题解

先说一下彩蛋是怎么来的吧:
首先,组织人去群主那里骗来了福利,
然后,我把彩蛋藏在了题目了,
最后,就有了你们见到的彩蛋。

没找到彩蛋的小伙伴儿们不要着急,写道彩蛋的地方我会揭秘。

下面开始正文:

7-1 国庆节到了不要慌~先发个朋友圈!

出题人:王梦琪

小柳写的PHP代码:

如果信仰有颜色 那一定是中国红

7-2 解二元二次整数方程

出题人:张洪旗(由小琪从HAINNU程序设计小组题库中选择)

小柳的C语言代码:

#include <stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    printf("%d",45-x-x*x);
    return 0;
}

7-3 输出这个数

出题人:王梦琪 & 柳汀洲

小琪的Python代码:

a=int(input())
b='123456789'
print("q"*int(a/1000),end='')
print("b"*int(a%1000/100),end='')
print("s"*int(a%100/10),end='')
print(b[0:(a%10)])

小柳的C++代码:

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int q=n/1000;
    int b=n/100%10;
    int s=n/10%10;
    int g=n%10;
    for(int i=0;i<q;i++)cout<<'q';
    for(int i=0;i<b;i++)cout<<'b';
    for(int i=0;i<s;i++)cout<<'s';
    for(int i=1;i<=g;i++)cout<<i;
    return 0;
}

7-4 小间谍

出题人:张洪旗(由小琪从HAINNU程序设计小组题库中选择)

出题人的C++代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;
    for(register int i=0;i<s.size();i++){
        int t=(s[i]-'0'+2)%10;
        cout<<t;
    }
}

7-5 Peer Review

出题人:柳汀洲

正解:c++可以用二维set来做,c可以用邻接表 + 排序

因为我在PAT参与重构和开发了互评这个项目,所以我出了这道题。我没在做广告…

因为出题人语文不好,感觉怎么都表述不清楚,互评规则比较复杂,所以没导致很多人都没有写这道题。。。

1给2,3评分
2给3,5评分
3给1,5评分
5给1,2评分

那么给1评分的是3,5
给2评分的是1,5

如果看懂了的话。。。题目数据比较水,构造复杂数据太浪费时间了,我去写论文了。。。(溜,所以暴力也有可能通过

我的C++代码:

#include <bits/stdc++.h>
using namespace std;
int n,k;
set<int>s[1000010];
int main()
{
    cin>>n>>k;
    while(n--)
    {
        int m;
        cin>>m;
        for(int i=0;i<k;i++)
        {
            int x;
            cin>>x;
            s[x].insert(m);
        }
    }
    int q;
    cin>>q;
    while(q--)
    {
        int x;
        cin>>x;
        for(auto i=s[x].begin();i!=s[x].end();i++)
        {
            if(i!=s[x].begin())cout<<" ";
            cout<<*i;
        }
        cout<<endl;
    }
    return 0;
}

所以,顺便说一句,如果想用C/C++打程序设计比赛的话,学好STL还是很重要的。

如果第五题提交的代码能够编译通过(包括0分),大家应该就能猜到彩蛋在哪道题了。对,就是第五题。具体在哪儿先不急,先来看最后两道题的题解。

7-6 A ÷ B

出题人:王梦琪 & 柳汀洲

小柳:“一开始小琪和我说要出这道题的时候,我还以为要考字符串,所以我的标答就用字符串写的,按位除,取余。直到今天早上突然意识到。。。"

小柳的Python代码:

a, b = map(int, input().split())
print(a // b, end = ' ')
print(a % b)

意识到后边省略号的内容是:Python能不能存下1000位的整数呢。。。我做测试用例最大1000位,题目写的10000😂。。。Python试了一下,还真AC了。。。

不会Python是硬伤啊。。。多掌握几门编程语言还是好的。。。

直到小琪用python写字符串处理被这道题卡住了一段时间。。。我又意识到了。。。原来小琪真的是想考字符串处理。。。

那就把我处理字符串的代码贴出来吧。。。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string a;int b,y=0,f=0;
    cin>>a>>b;
    for(int i=0;i<a.length();i++)
    {
        int d=y*10+a[i]-'0';
        int s=d/b;
        if(f!=0||s!=0)
        {
            cout<<s;
            f=1;
        }
        y=d%b;
    }
    if(f==0)cout<<0;
    cout<<" "<<y;
    return 0;
}

这道题还有一个梗,是前几年出现的,1145141919810,大家可以自行百度。

7-7 有多少条路?

出题人:柳汀洲

考点:图的存储 + 记忆化搜索

这道题的考点是蓝桥杯出的 最多的一个考点,如果想参加蓝桥杯,一定要把这道题弄懂。

首先,这道题可以通过暴力(爆搜,dfs)骗到绝大部分的分,C语言代码如下:

#include <bits/stdc++.h>
using namespace std;
int n,m,e[510][510],a,b,r;
void dfs(int x)
{
    if(x==b)
    {
        r++;
        return;
    }
    for(int i=1;i<=n;i++)
    {
        if(e[x][i]==1)
        {
            dfs(i);
        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    while(m--)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        e[x][y]=1;
    }
    scanf("%d%d",&a,&b);
    dfs(a);
    printf("%d",r);
    return 0;
} 

#include <stdio.h>
int n,m,e[501][501],a,b;
int dfs(int x)
{
    int res=0;
    if(x==b)
    {
        return 1;
    }
    for(int i=1;i<=n;i++)
    {
        if(e[x][i]==1)
        {
            res+=dfs(i);
        }
    }
    return res;
}
int main()
{
    scanf("%d%d",&n,&m);
    while(m--)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        e[x][y]=1;
    }
    scanf("%d%d",&a,&b);
    printf("%d",dfs(a));
    return 0;
} 

但是这样只有22分(只扣了3分),因为图最多有500个点,暴力的话,时间复杂度的数量级就是 2 500 2^{500} 2500,远超过1s内能运行次数的数量级 1 0 7 10^7 107,所以,这道题还需要在dfs的基础上记忆一下(记忆化搜索)。

小柳的C语言代码如下:

#include <stdio.h>
int n,m,e[510][510],a,b,f[510];
int dfs(int x)
{
    int res=0;
    if(x==b)
    {
        return 1;
    }
    for(int i=1;i<=n;i++)
    {
        if(e[x][i]==1)
        {
            if(f[i]==0)
            {
                f[i]=dfs(i);
            }
            res+=f[i];
        }
    }
    return res;
}
int main()
{
    scanf("%d%d",&n,&m);
    while(m--)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        e[x][y]=1;
    }
    scanf("%d%d",&a,&b);
    printf("%d",dfs(a));
    return 0;
} 

小柳的C++代码如下:

#include <bits/stdc++.h>
using namespace std;
int n,m,a,b,f[510];
vector<int>v[510];
int dfs(int x)
{
    int res=0;
    if(x==b)
    {
        return 1;
    }
    for(auto i=v[x].begin();i!=v[x].end();i++)
    {
        if(f[*i]==0)
        {
            f[*i]=dfs(*i);
        }
        res+=f[*i];
    }
    return res;
}
int main()
{
    scanf("%d%d",&n,&m);
    while(m--)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        v[x].push_back(y);
    }
    scanf("%d%d",&a,&b);
    printf("%d",dfs(a));
    return 0;
} 

终于可以说彩蛋在哪里了

第五题

第三段话

电脑端的话,把鼠标移到第三段话上

手机端的话,点击一下第三段话

最后说一句,如果正式的比赛/考试,不要抄袭不要抄袭不要抄袭,包括问别人和在网上查(当然这次比赛就是玩一玩,没什么关系,但是也建议不要抄袭)。

①2022CCPC网络赛某科大因某同学使用word翻译 和 使用副机位违规切屏写代码+word翻译被组委会禁赛两年;(今天貌似有反转了,撤销了之前全校禁赛两年的决定,之后再做讨论。当前,取消本次比赛成绩,违规的那个队伍禁赛,肯定是逃不掉了)

②2022某比赛某985学校因某同学使用电脑上的老代码,被取消全校所有人的成绩;

③2022某考试某985学生因使用某违规工具通过网络互相传输代码,监考当场发现 + 赛后再一次被查重查到,被加入平台黑名单并禁考两年,并通报学校和几百个联盟企业。

(排行榜及答题数据分析稍后发在群文件里)

比赛题目集已经恢复了查看题目权限,大家可以去看彩蛋了。

大家也可以点击下面的“我要补题”,加入补题题目集,进行补题。

↓👇

我要补题

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小柳学渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值