第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组

试题 A: 平方和

第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组_第1张图片

思路:

暴力模拟跑一遍即可,答案是2658417853

代码:

#include

using namespace std;

int main()
{
    long long  cnt1=0,cnt2=0,cnt3=0;
    long long ans=0,i,j,t;
    for(i=1;i<=2019;i++)
    {
        j=i;
        int flag=0;
        while(j!=0)
        {
            if(j%10==0||j%10==1||j%10==2||j%10==9)
            {
                flag=1;break;
            }
            j/=10;
        }
        if(flag) {
            ans+=i*i;
            cout<

试题 B: 数列求值

第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组_第2张图片

思路:

一个斐波那契数列的变种,因为项数很多而且求最后四位数组所以也不用想太多,答案是4659

代码:

#include

using namespace std;

#define int long long
int a[4];
signed main()
{
    a[1]=1,a[2]=1,a[3]=1;
    int i,j,ans;
    for(i=4;i<=20190324;i++)
    {
        a[4]=(a[1]%10000+a[2]%10000+a[3]%10000)%10000;
        a[1]=a[2]%10000;
        a[2]=a[3]%10000;
        a[3]=a[4]%10000;
    }
    cout<

试题 C: 最大降雨量

第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组_第3张图片

 思路:

其实不难想到49个法术每天都要用也就是七个星期,而七个星期每次都取中位数,那么贪心的每次都想取最大,所以模拟一下,第一周取最小的1,2,3然后取个最大的49,48,47,46,再排序,取七次即可。最后答案34

#include

using namespace std;

#define int long long

signed main()
{
    vectorans[7];
    int min1=1,max1=49,ans1=0;
    int i,j;
    for(i=0;i<7;i++)
    {
        while(ans[i].size()!=7)
        {
            if(ans[i].size()<3){
                ans[i].push_back(min1++);
            }
            else {
                ans[i].push_back(max1--);
            }
        }
        sort(ans[i].begin(),ans[i].end());
        for(j=0;j

试题 D: 迷宫

第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组_第4张图片

思路:

发现是从起点到终点的最短路,所以首选bfs,然后要求路径,这里处理一下,把每个点是从哪个点过来的记录一下,然后输出的时候再从尾到头找回去,记得输出要翻转字符串。

代码:

#include

using namespace std;

char mp[55][55];
int dx[5]= {0,1,0,0,-1},dy[5]= {0,0,-1,1,0};
bool vis[55][55];
int pre[55*55+1000];
int main()
{
    string ly;
    int n,m,i,j,t;
    pairPI;
    cin>>n>>m;
    getchar();
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            cin>>mp[i][j];
        }
    }
    queue>qq;
    map,int >ans;
    map,pair>edges;
    qq.push({1,1});
    while(!qq.empty())
    {
        pair aa=qq.front();
        qq.pop();
        int x1=aa.first,y1=aa.second;
        if(x1==n&&y1==m)
        {
            cout<=1&&x2<=n&&y1>=1&&y2<=m)
            {
                vis[x2][y2]=1;
                ans[ {x2,y2}]=ans[ {x1,y1}]+1;
                edges[ {x2,y2}].first=x1;
                edges[ {x2,y2}].second=y1;
                qq.push({x2,y2});
            }
        }
    }
    int edx=n,edy=m;
    string ss="";
    mapqm;
    qm[1]='D',qm[2]='L',qm[3]='R',qm[4]='U';
    while(1)
    {
        int x1=edges[ {edx,edy}].first;
        int y1=edges[ {edx,edy}].second;
        for(i=1;i<=4;i++)
        {
            if(x1+dx[i]==edx&&y1+dy[i]==edy)
            {
                ss+=qm[i];
                break;
            }
        }
        edx=x1,edy=y1;
        if(edx==1&&edy==1){
            break;
        }
    }
    reverse(ss.begin(),ss.end());
    cout<

 试题 E: RSA 解密

第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组_第5张图片

思路:

比赛的时候没看,暂时不会

试题 F: 完全二叉树的权值

第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组_第6张图片思路:

模拟找节点找深度就行,比较简单

#include

using namespace std;

#define int long long
signed main()
{
    int N,i,j;
    vectorans[555];
    cin>>N;
    int cnt=0,sum1=1;
    for(i=1;i<=N;i++)
    {
        cin>>j;
        if(i<=sum1)
        {
            ans[cnt].push_back(j);
        }
        else {
            ++cnt;
            sum1+=(1<max1)
        {
            max1=ss1;
            anss=i+1;
        }
    }
    cout<

  试题 G: 外卖店优先级第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组_第7张图片

 思路:

一个模拟贪心题,观察到时间不是很长,所以模拟时间跑就行,不过这里细节挺多的,要注意出队入队的条件,读题要读清楚。

#include

using namespace std;

const int maxn=1e5+1000;
struct node {
    int pret,levl;
    bool f1;
}mo[maxn];
struct node1 {
    int stt,idd;
}qury[maxn];
bool cmp1(node1 a,node1 b )
{
    if(a.stt!=b.stt)
        return a.stt>n>>m>>t;
    for(i=0;i>qury[i].stt>>qury[i].idd;
    }
    sort(qury,qury+m,cmp1);
    for(i=0;imo[id-1].pret)
            mo[id-1].levl=max(mo[id-1].levl-(ts-mo[id-1].pret-1),0);
        if(mo[id-1].f1==1&&mo[id-1].levl<=3) mo[id-1].f1=0;
        mo[id-1].levl+=2;
        if(mo[id-1].f1==0&&mo[id-1].levl>5) mo[id-1].f1=1;
        mo[id-1].pret=ts;
    }
    int ans=0;
    for(i=0;i5) mo[i].f1=1;
        if(mo[i].f1==1&&mo[i].levl<=3) mo[i].f1=0;
        if(mo[i].f1==1) ans++;
    }
    cout<

试题 H: 修改数组

第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组_第8张图片

思路:

真是没想到是并查集做法,待补

试题 I: 糖果

第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组_第9张图片

思路:

不会,二分贪心跑了几分

试题 J: 组合数问题

第十届蓝桥杯大赛软件类省赛C/C++ 大学 A 组_第10张图片 思路:

不会

 

你可能感兴趣的:(蓝桥杯,算法,c++,学习)