【LGR-203-Div.4】洛谷入门赛 #28

【LGR-203-Div.4】洛谷入门赛 #28

\(A\) luogu B4042 [语言月赛 202410] 顺序结构 \(AC\)

  • 顺序结构。

    点击查看代码
    int main()
    { 
        ll a;
        cin>>a;
        cout<<3*(5+a)<<" "<<3*a+5<<endl;
        return 0;
    }
    

\(B\) luogu B4043 [语言月赛 202410] 刻度尺 \(AC\)

  • 模拟。

    点击查看代码
    int main()
    {
        ll n,a,b;
        cin>>n>>a>>b;
        if(a-b>=0||a+b<=n)
        {
            if(b==0)
            {
                cout<<a<<endl;
            }
            else
            {
                if(a-b>=0)
                {
                    cout<<a-b<<" ";
                }
                if(a+b<=n)
                {
                    cout<<a+b<<endl;
                }
            }
        }
        else
        {
            cout<<"No solution"<<endl;
        }
        return 0;
    }
    

\(C\) luogu B4044 [语言月赛 202410] 奇迹战神 \(AC\)

  • 模拟。

    点击查看代码
    int main()
    {
        ll n,w,d,ans=0x7f7f7f7f,i;
        cin>>n;	
        for(i=1;i<=n;i++)
        {
            cin>>w>>d;
            ans=min(ans,7*(d-1)+w+1);
        }
        cout<<ans<<endl;
        return 0;
    }
    

\(D\) luogu B4045 [语言月赛 202410] 同桌 \(AC\)

  • 两人可以成为同桌当且仅当互相想要和对方做同桌。

    点击查看代码
    ll p[10010],vis[10010];
    int main()
    {
        ll n,flag=1,i;
        cin>>n;
        for(i=1;i<=2*n;i++)
        {
            cin>>p[i];
        }
        for(i=1;i<=2*n;i++)
        {
            if(p[i]==i||p[p[i]]!=i)
            {
                flag=0;
                break;
            }
        }
        if(flag==0)
        {
            cout<<"No"<<endl;
        }
        else
        {
            cout<<"Yes"<<endl;
        }
        return 0;
    }
    

\(E\) luogu B4046 [语言月赛 202410] 寻找质数 \(AC\)

  • 筛法求素数板子。

    点击查看代码
    int prime[1000010],vis[1000010],len=0;
    void isprime(int n)
    {
        memset(vis,0,sizeof(vis));
        for(int i=2;i<=n;i++)
        {
            if(vis[i]==0)
            {
                len++;
                prime[len]=i;
            }
            for(int j=1;j<=len&&i*prime[j]<=n;j++)
            {
                vis[i*prime[j]]=1;
                if(i%prime[j]==0)
                {
                    break;
                }
            }
        }
    }
    int main()
    {
        int n,m,r,k,ans=-1,cnt=0,i;
        cin>>n>>m>>r>>k;
        isprime(n);
        for(i=len;i>=1;i--)
        {
            if(prime[i]%m==r)
            {
                cnt++;
                if(cnt==k)
                {
                    ans=prime[i];
                    break;
                }
            }
        }
        cout<<ans<<endl;	
        return 0;
    }
    

\(F\) luogu B4047 [语言月赛 202410] 校门外的施工 \(AC\)

  • 做法同 luogu P1047 [NOIP2005 普及组] 校门外的树 ,如果你要写珂朵莉树的话我也不拦着你。

    点击查看代码
    int a[5010],b[5010];
    int main()
    {
        int n,m,pd,l,r,ans1=0,ans2=0,i,j;
        cin>>m>>n;
        ans1=m;
        ans2=m-1;
        for(i=1;i<=n;i++)
        {
            cin>>pd>>l>>r;
            if(pd==1)
            {	
                for(j=l+1;j<=r-1;j++)
                {
                    a[j]=1;
                }
                for(j=l;j<=r-1;j++)
                {
                    b[j]=1;
                }
            }
            else
            {
                for(j=l;j<=r;j++)
                {
                    a[j]=1;
                }
                for(j=l;j<=r-1;j++)
                {
                    b[j]=1;
                }
            }
        }
        for(i=1;i<=m;i++)
        {
            ans1-=a[i];
            ans2-=b[i];
        }
        cout<<ans1<<" "<<ans2<<endl;
        return 0;
    }
    

\(G\) luogu B4048 [语言月赛 202410] 断章取义 \(AC\)

  • 如果没有统计剪辑轮数的话就是 luogu P4824 [USACO15FEB] Censoring S 了,因为 \(|s|\) 很小所以直接模拟即可。

    点击查看代码
    int vis[150];
    char s[150],t[150];
    int main()
    {
        int T,n,m,cnt=0,flag,i;
        cin>>T>>(s+1);
        n=strlen(s+1);
        while(1)
        {
            flag=0;
            memset(vis,0,sizeof(vis));
            for(i=1;i<=n;i++)
            {
                t[i]=s[i];
            }
            for(i=1;i<=n;i++)
            {
                if(t[i]=='n'&&t[i+1]=='o'&&t[i+2]=='t'&&i+2<=n)
                {
                    flag=1;
                    vis[i]=vis[i+1]=vis[i+2]=1;
                }
            }
            if(flag==0)
            {
                break;
            }
            else
            {
                cnt++;
                m=0;
                for(i=1;i<=n;i++)
                {
                    if(vis[i]==0)
                    {
                        m++;
                        s[m]=t[i];
                    }
                }
                n=m;
            }
        }
        for(i=1;i<=n;i++)
        {
            cout<<s[i];
        }
        cout<<endl;
        cout<<cnt<<endl;
        return 0;
    }
    

\(H\) luogu B4049 [语言月赛 202410] 平均分计算 \(AC\)

  • 模拟。

    点击查看代码
    struct node
    {
        ll id,sc;
    }e[110];
    ll id[50][110],sc[50][110],w[50][110],p[50];
    ll gcd(ll a,ll b)
    {
        return b?gcd(b,a%b):a;
    }
    bool cmp(node a,node b)
    {
        return a.sc>b.sc;
    }
    int main()
    {
        ll n,pos,i,j,k,ans=0,cnt=0,tmp,d;
        cin>>n;
        for(k=1;k<=n;k++)
        {
            cin>>p[k];
            for(i=1;i<=p[k];i++)
            {
                cin>>id[k][i];
            }
            for(i=1;i<=p[k];i++)
            {
                cin>>sc[k][i];
            }
            for(i=1;i<=p[k];i++)
            {
                cin>>w[k][i];
            }
        }
        cin>>pos;
        for(k=1;k<=n;k++)
        {
            sort(id[k]+1,id[k]+1+p[k]);
            for(i=1;i<=p[k];i++)
            {
                e[i].sc=sc[k][i];
                e[i].id=id[k][i];
            }
            sort(e+1,e+1+p[k],cmp);
            for(i=1;i<=p[k];i++)
            {
                if(e[i].id==pos)
                {
                    cnt++;
                    for(j=i;e[j].sc==e[i].sc&&j>=1;j--);
                    ans+=w[k][j+1];
                    break;
                }
            }
        }
        if(ans%cnt==0)
        {
            cout<<ans/cnt<<endl;
        }
        else
        {
            tmp=ans/cnt;
            ans-=tmp*cnt;
            d=gcd(ans,cnt);
            ans/=d;
            cnt/=d;
            cout<<tmp<<"+"<<ans<<"/"<<cnt<<endl;
        }
        return 0;
    }
    

总结

  • \(B\)if 打成了 else if ,吃了发罚时。
  • \(F\) 数组开小了,吃了发罚时;短时间没适应过来 \(n\) 表示操作次数, \(m\) 表示长度。
  • \(E,G\) 关于排名的定义一开始没有注意到。
  • \(G\) 因为不会统计比它大的数的个函数,吃了两发罚时。
posted @ 2024-10-18 21:38  hzoi_Shadow  阅读(140)  评论(3编辑  收藏  举报
扩大
缩小