第十三届蓝桥杯C++B组回顾

代码题

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6J226ZuS,size_20,color_FFFFFF,t_70,g_se,x_16

 

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

int main()
{
    ll a,b,n;
    cin>>a>>b>>n;
    ll day=1;
    ll sum=0;
    while(sum<n)
    {
        if(day%7>=1&&day%7<=5)
            sum+=a;
        else if(day%7==6||day%7==0)
            sum+=b;
        day++;
    }
    cout<<day-1<<endl;
    return 0;
}

***该题需要注意的就是要用long long,写的时候未考虑是否会超时***

***往往取模是一种很好的方法减少时间复杂度***

优化后

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

int main()
{
    ll a,b,n;
    cin>>a>>b>>n;
    ll ans = 5*a+2*b;
    ll day=1;
    ll sum=0;
    day = day+n/ans*7;
    n=n%ans;
    while(sum<n)
    {
        if(day%7>=1&&day%7<=5)
            sum+=a;
        else if(day%7==6||day%7==0)
            sum+=b;
        day++;
    }
    cout<<day-1<<endl;
    return 0;
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6J226ZuS,size_20,color_FFFFFF,t_70,g_se,x_16

#include<iostream>
using namespace std;

const int maxn = 10000+5;
int len[maxn]={0};
int maxHeight[maxn]={0};

int main()
{
    int n;
    cin>>n;
    int flag=0;
    int p=1;
    int t =4*n+1;
    for(int i=1;i<=n;i++)
    {
        len[i]++;
        maxHeight[i]++;
    }
    while(t--)
    {
        if(flag==0) //flag=0 正着走,flag=1逆着走
        {
            len[p]=0;
            for(int i=1;i<=n;i++)
            {
                len[i]++;
                if(len[i]>maxHeight[i])
                    maxHeight[i]=len[i];
            }
            p++;
            if(p==n+1)
            {
                p=n-1;
                flag=1;
            }
            continue;
        }
        if(flag==1)
        {
            len[p]=0;
            for(int i=1;i<=n;i++)
            {
                len[i]++;
                if(len[i]>maxHeight[i])
                    maxHeight[i]=len[i];
            }
            p--;
            if(p==0)
            {
                p=2;
                flag=0;
            }
        }
    }
    for(int i=1;i<=n;i++)
        cout<<maxHeight[i]<<" ";
    return 0;
}

******比赛的时候写的是t=2*n,现在发现走的次数不够,应该是t=4*n*****

 


版权声明:本文为qq_52025040原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。