【LGR-154-Div.4】洛谷入门赛 #15

【LGR-154-Div.4】洛谷入门赛 #15

\(A\) luoguB3813 [语言月赛 202308]四个人的排名加起来没有小粉兔高 AC

  • 水题。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define sort stable_sort 
    #define endl '\n'
    int main()
    {
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        if(a+b+c+d<51)
        {
            cout<<"Rabbit wins";
        }
        else
        {
            cout<<"Rabbit lose";
        }
        return 0;
    }
    

\(B\) luoguB3814 [语言月赛 202308]小粉兔喜欢下象棋吗 AC

  • 时间复杂度 \(O(8^3)\) ,枚举即可。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define sort stable_sort 
    #define endl '\n'
    int dix[10]={-2,-2,-1,-1,1,1,2,2},diy[10]={1,-1,2,-2,2,-2,1,-1};
    int main()
    {
        int sx,sy,cx,cy,mx,my,i,j,k;
        cin>>sx>>sy>>cx>>cy>>mx>>my;
        for(i=0;i<=7;i++)
        {
            for(j=0;j<=7;j++)
            {
                for(k=0;k<=7;k++)
                {
                    if(mx+dix[i]+dix[j]==sx&&my+diy[i]+diy[j]==sy&&mx+dix[i]+dix[k]==cx&&my+diy[i]+diy[k]==cy)
                    {
                        cout<<"Yes"<<endl;
                        return 0;
                    }
                }
            }
        }
        cout<<"No"<<endl;
        return 0;
    }
    

\(C\) luoguB3815 [语言月赛 202308]小粉兔的挂科与压力 AC

  • \(switch\) 大法好。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define sort stable_sort 
    #define endl '\n'
    int main()
    {
        int n,i,p,ans=0,sum=1+2+3+4+5+6;
        cin>>n;
        for(i=1;i<=n-1;i++)
        {
            cin>>p;
            switch(p)
            {
                case 1:
                    ans+=sum-2-1;
                    break;
                case 2:
                    ans+=sum-1-2;
                    break;
                case 3:
                    ans+=sum-4-3;
                    break;
                case 4:
                    ans+=sum-3-4;
                    break;
                case 5:
                    ans+=sum-6-5;
                    break;
                case 6:
                    ans+=sum-5-6;
                    break;
            }
        }
        cin>>p;
        switch(p)
        {
            case 1:
                ans+=sum-2;
                break;
            case 2:
                ans+=sum-1;
                break;
            case 3:
                ans+=sum-4;
                break;
            case 4:
                ans+=sum-3;
                break;
            case 5:
                ans+=sum-6;
                break;
            case 6:
                ans+=sum-5;
                break;
        }
        cout<<ans;
        return 0;
    }
    

\(D\) luoguB3816 [语言月赛 202308]小粉兔做麻辣兔头 AC

  • 水题。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define sort stable_sort 
    #define endl '\n'
    int main()
    {
        ll n,c,i,a,ans,maxx=0,k;
        cin>>n>>c;
        ans=n*c;
        k=0;
        for(i=1;i<=n;i++)
        {
            cin>>a;
            maxx=max(maxx,a);
            if(maxx+c*(n-i)<ans)
            {
                ans=maxx+c*(n-i);
                k=i;
            }
        }
        cout<<k<<" "<<ans;
        return 0;
    }
    

\(E\) luoguB3817 [语言月赛 202308]小粉兔还会忘记考试吗 AC

  • \(STL\) 大法好,练习使用 \(map\)
  • 没有注意到只要有成绩就不算缺考,调了 \(10min+\)
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define sort stable_sort 
    #define endl '\n'
    ll e[50001];
    map<ll,ll>s;
    int main()
    {
        ll n,m,i,ans1=0,ans2=0,p,ls;
        cin>>n>>m;
        for(i=1;i<=n;i++)
        {
            cin>>e[i];
        }
        for(i=1;i<=m;i++)
        {
            cin>>p>>ls;
            s[p]=ls+1;
        }
        for(i=1;i<=n;i++)
        {
            if(s[e[i]]==0)
            {
                ans1++;
            }
            if(s[e[i]]-1<60)
            {
                ans2++;
            }
        }
        cout<<ans1<<endl;
        cout<<ans2<<endl;
        return 0;
    }
    

\(F\) luoguB3818 [语言月赛 202308]电脑中了满屏粉兔病毒

  • \(N^3\) 暴力枚举即可。
```cpp
#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define sort stable_sort 
#define endl '\n'
char c[501][501];
int main()
{
	int n,m,sum1,sum2,i,j,k,sum,flag,ans=0;;
	cin>>n>>m>>sum1>>sum2;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			cin>>c[i][j];
		}
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(c[i][j]=='F')
			{
				sum=flag=0;
				for(k=1;k<=i-1;k++)
				{
					if(c[k][j]=='M')
					{
						flag=1;
						break;
					}
				}
				if(flag==0)
				{
					sum++;
				}
				flag=0;
				for(k=1;k<=j-1;k++)
				{
					if(c[i][k]=='M')
					{
						flag=1;
						break;
					}
				}
				if(flag==0)
				{
					sum++;
				}
				flag=0;
				for(k=i+1;k<=n;k++)
				{
					if(c[k][j]=='M')
					{
						flag=1;
						break;
					}
				}
				if(flag==0)
				{
					sum++;
				}
				flag=0;
				for(k=j+1;k<=m;k++)
				{
					if(c[i][k]=='M')
					{
						flag=1;
						break;
					}
				}
				if(flag==0)
				{
					sum++;
				}
				if(sum>=3)
				{
					ans++;
				}
			}
			if(c[i][j]=='M')
			{
				sum=flag=0;
				for(k=1;k<=i-1;k++)
				{
					if(c[k][j]=='F')
					{
						flag=1;
						break;
					}
				}
				if(flag==0)
				{
					sum++;
				}
				flag=0;
				for(k=1;k<=j-1;k++)
				{
					if(c[i][k]=='F')
					{
						flag=1;
						break;
					}
				}
				if(flag==0)
				{
					sum++;
				}
				flag=0;
				for(k=i+1;k<=n;k++)
				{
					if(c[k][j]=='F')
					{
						flag=1;
						break;
					}
				}
				if(flag==0)
				{
					sum++;
				}
				flag=0;
				for(k=j+1;k<=m;k++)
				{
					if(c[i][k]=='F')
					{
						flag=1;
						break;
					}
				}
				if(flag==0)
				{
					sum++;
				}
				if(sum>=3)
				{
					ans++;
				}
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}
```

\(G\) luoguB3819 [语言月赛 202308]小粉兔处理题解审核志愿者轮换 AC

  • \(STL\) 大法好,练习使用 \(map\)
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define sort stable_sort 
    #define endl '\n'
    string pd;
    map<string,bool>e;
    map<string,bool>::iterator it;
    int main()
    {
        int n,m,l,i;
        cin>>n>>m>>l;
        for(i=1;i<=n;i++)
        {
            cin>>pd;
            e[pd]=true;
        }
        for(i=1;i<=m;i++)
        {
            cin>>pd;
            e[pd]=false;
        }
        for(i=1;i<=l;i++)
        {
            cin>>pd;
            e[pd]=true;
        }
        for(it=e.begin();it!=e.end();it++)
        {
            if(it->second==true)
            {
                cout<<it->first<<endl;
            }
        }
        return 0;
    }
    

\(H\) luoguB3820 [语言月赛 202308]小粉兔的元素反应

  • 口胡:若在序列 \(a\) 中,存在一组 \(i,j\) 满足 \(a_i \times a_j \bmod 154=0\)\(a_i \times a_j \bmod 147=0\) ,则一定有解。
  • 部分分( \(80pts\) ):暴力枚举,复杂度 \(O(Tn^2)\) ,加些特判。
  • 正解:
    • 一个简单性质: \((a_i \times a_j) \bmod p=((a_i \bmod p) \times (a_j \bmod p)) \bmod p\)
    • \(k \le \sum\limits_{i=1}^{n} a_i\) ,输出 Yes
    • \(map\) 或直接枚举 \(a_i \bmod p\) 的值即可,复杂度为 \(O(TK+ \sum n)\) ,其中 \(K=154^2+147^2+15=45340\)
      • 这数据有点弱啊,压着线过都正常,但是#8#9#10 300多ms过就不正常了。
      • 加强数据了@我。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define sort stable_sort 
    #define endl '\n'
    char k[1000001];
    ll a[1000001],sum1[155],sum2[148];
    bool check(ll sum[],ll mod)
    {
        for(ll i=0;i<=mod-1;i++)
        {
            if(sum[i]!=0)
            {
                for(ll j=0;j<=mod-1;j++)
                {
                    if(!(i==j&&sum[i]==1))//特判
                    {
                        if(sum[j]!=0)
                        {
                            if((i*j)%mod==0)
                            {
                                return true;
                            }
                        }
                    }
                }
            }
        }
        return false;
    }
    int main()
    {
        ll t,n,i,j,flag,sum,len,num;
        cin>>t;
        for(i=1;i<=t;i++)
        {
            cin>>n>>(k+1);
            memset(sum1,0,sizeof(sum1));
            memset(sum2,0,sizeof(sum2));
            flag=sum=num=0;
            for(j=1;j<=n;j++)
            {
                cin>>a[j];
                sum1[a[j]%154]++;
                sum2[a[j]%147]++;
                sum+=a[j];
            }
            len=strlen(k+1);
            for(j=1;j<=len;j++)
            {
                num=num*10+k[j]-'0';
                if(num>sum)
                {
                    flag=1;
                    break;
                }
            }
            if(flag==1)
            {
                if(check(sum1,154)==true||check(sum2,147)==true)
                {
                    cout<<"Yes"<<endl;
                }
                else
                {
                    cout<<"No"<<endl;
                }
            }
            else
            {
                cout<<"Yes"<<endl;
            }
        }
        return 0;
    }
    

\(I\) luoguB3821 [语言月赛 202308]小粉兔 Failed System Test WA

  • 问题1:卡 \(int\)
    • 赛场上把 \(int\) 的范围记成了 \(2e10\) ,挂了 \(750pts\)
  • 问题2:输出 ac
    • 把判断特征误以为是数据规模,临结束才发现。
    #include <iostream>
    
    using namespace std;
    
    int main() {
    int taskId;
    cin >> taskId;
    if (taskId == 1) {
        cout << "1000000000 999999999" <<endl;
    } else if (taskId == 2) {
        cout << "ac" << endl;
    } else { // 这个 else 不会被执行
        cout << "Stupid Fusu!" << endl;
    }
    }
    

总结

  • 本次开题顺序 \(ABCDEIGI\) ,要合理安排开题顺序。
  • 先通读题面,防止漏读信息( \(E,I\) 因此被卡)。
  • 记住各种类型所存储的范围
    • 一亿是 \(1e8\)
    • \(int\) : \((-2^{31}-1)\) ~ \((2^{31}-1)\)
      • \(-2147483647\) ~ \(2147483647\)
  • 不要在一道题上浪费太长时间( \(I\) 想了 \(1h\) ,导致 \(F,H\) 没写)。
  • \(hack\) 题目首先考虑卡掉存储类型(eg: \(I\) 的问题一)。
posted @ 2023-08-13 17:23  hzoi_Shadow  阅读(498)  评论(6编辑  收藏  举报
扩大
缩小