1 条题解

  • 0
    @ 2025-8-24 21:28:07

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar lgxt
    **

    搬运于2025-08-24 21:28:06,当前版本为作者最后更新于2018-09-29 22:45:39,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    来自蒟蒻的题解。。。 这道题已经给出 1≤A[i],B[i]≤5 的条件,从等级一到等级五挨个模拟即可。 代码:

    #include<iostream>
    using namespace std;
    int s[100001][2],t[6];//数组s代表课桌及考生等级,数组t分别代表等级1~5最大的排数 
    int main()
    {
    	int n;
    	cin>>n;
    	for(int i=0;i<n;i++)
    	{
    		cin>>s[i][0]>>s[i][1];//s[i][0]、s[i][1]分别表示同一课桌两人的等级 
    	}
    	for(int i=1;i<=5;i++)// 等级1~5模拟 
    	{
    		int ans=0,x=0;
    		for(int o=0;o<n;o++)
    		{
    			if(s[o][0]==i||s[o][1]==i)
    			{
    				x++;//如果该课桌符合条件,排数加一 
    			}
    			if(s[o][0]!=i&&s[o][1]!=i||o==n-1)//若i的连续排数一直到最后的课桌的话也要计数,故判断条件有 o==n-1 
    			{
    				ans=max(ans,x);//不符合,刷新i等级的最大排数 
    				x=0;//重新计数 
    			}
    		}
    		t[i]=ans;//得出等级i最大排数 
    	}
    	int max=0,maxs=0;
    	for(int i=1;i<=5;i++)//寻找最大排数及其最小等级 
    	{
    		if(t[i]>max)
    		{
    			maxs=i;//最大排数 
    			max=t[i];//最大排数的等级 
    		}
    	}
    	cout<<max<<" "<<maxs;//输出 
    	
    	return 0;
    }
    
    • 1

    信息

    ID
    682
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者