12.13日集训

· · 个人记录

错误原因 分数
P5737 100
P3805 100
P4013 超时 25
P4005 细节错误 70
P4033 思路错误 20
P8787 骗分未遂 0

A

P5737 【深基7.例3】闰年展示

时间复杂度:O(b-a+1)

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int ck(int x)
{
    if(x%4==0 and x%100!=0)
        return 1;
    else if(x%400==0)
        return 1;
    return 0;
}
signed main()
{
    int a,b,sum=0;
    cin>>a>>b;
    for(int i=a;i<=b;i++)
    {
        if(ck(i))
            sum++;;
    }
    cout<<sum<<endl;
    for(int i=a;i<=b;i++)
    {
        if(ck(i))
            cout<<i<<" ";
    }
    return 0;
} 

B

[语言月赛 202307] 团伙首领

时间复杂度:O(n)

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
bool sum[1000005];
signed main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int a;;
        cin>>a;
        sum[a]=1;
    }
    int d=0;
    for(int i=1;i<=1000005;i++)
    {
        d+=sum[i];
    }
    cout<<d;
    return 0;
}

C

[语言月赛 202407] significance

时间复杂度:O(n n n)

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x[105],sum[105][105],c[105]; 
signed main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>x[i];
        for(int j=1;j<=x[i];j++)
        {
            cin>>sum[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        int cnt=x[i];
        for(int j=1;j<=x[i];j++)
        {
            int l=sum[i][j];
            for(int k=1;k<=x[sum[i][j]];k++)
            {
                if(sum[l][k]!=i)
                    cnt++;
            }
        }
        cout<<cnt<<" ";
    }
    return 0;
}

D

B4005 [GESP202406 四级] 黑白方块

时间复杂度:O(n n n)

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
char a[15][15];
signed main()
{
    int n,m,maxi=-1e9;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>a[i][j];
    for(int o=1;o<=n;o++)
    {   
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++)
            {
                for(int k=1;k<=m;k++)
                {
                    int sum=0;
                    for(int l=o;l<=o+j-1;l++)
                    {
                        for(int r=i;r<=i+k-1;r++)
                        {
                            sum+=a[l][r]-'0';
                        }
                    }
                    if(sum*2==j*k)
                        maxi=max(maxi,(j*k));
                }
            }
        }
    }
    if(maxi==-1e9)
    {
        cout<<0;
        return 0;
    }
    cout<<maxi;
    return 0;
}

E

B4033 [语言月赛 202409] 考试

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x,y,r,a[1005],b[1005],c[1005];
int cmp(int x,int y)
{
    return x>y;
}
signed main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=n;i++)
        cin>>b[i];
    for(int i=1;i<=n;i++)
    {
        if(a[i]>b[i])
            x++;
        else if(a[i]<b[i])
            y++;
        else if(a[i]==b[i])
            r++;
        c[i]=a[i]-b[i];
    }
    if(x>y)
        cout<<0;
    else
    {
        sort(c+1,c+n+1,cmp);
        int sum=0;
        for(int i=1;i<=n;i++)
        {
            if(c[i]==0)
            {
                sum++;
                x++;
                r--;
                if(x>y)
                    break;
            }
            if(c[i]<0)
            {
                sum+=abs(c[i]);
                y--;
                if(x>y)
                    break;
                sum++;
                x++;
                if(x>y)
                    break;
            }

        }
        cout<<sum;
    }
    return 0;
}

F

[蓝桥杯 2022 省 B] 砍竹子

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[200005],cnt[200005],o; 
int cmp(int x,int y)
{
    return x>y;
}
int d(int x)
{
    return sqrt(x/2+1);
}
signed main()
{
    cin>>n;
    int maxi=-1e9;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        int l=a[i];
        while(l!=1)
        {
            l=d(l);
            cnt[i]++;
        }
        maxi=max(maxi,cnt[i]);
    }
    for(int j=maxi;j>=1;j--)
    {
        for(int i=1;i<=n;i++)
        {
            if(j==cnt[i] and a[i]!=a[i+1])
            {
                o++;
                cnt[i]--;
                a[i]=d(a[i]);
            }
            else if(j==cnt[i])
            {
                cnt[i]--;
                a[i]=d(a[i]);
            }
        }
    }
    cout<<o<<endl;
    return 0;
}

错误样例: