2 条题解

  • 0
    @ 2022-12-24 22:28:23

    /贪心策略: 分行列,找到分开学生最多的一条过道/

    /*贪心策略:
    分行列,找到分开学生最多的一条过道*/
    #include<bits/stdc++.h>
    using namespace std;
    int a[2][2000],b,c,d,e,f,g,h,k,l,m[2][2000];
    //a[][]=>row,line;
    //b=>row, c=>line, d=>cut row, e=>cut line;
    //g,h,k,l=>Ax,Ay,Bx,By;
    bool way (int a,int b)
    {
    	return a>b;
    }
    void pai (int a[],int b[],int c,int d)
    {
    	int e[1000];
    	for (int i=0;i<1000;i++)
    	e[i]=i;//catch row/line num
    	for (int i=0;i<c;i++)
    	for (int j=0;j<c-1;j++)
    	if (a[j]<a[j+1])
    	{
    		swap (a[j],a[j+1]);
    		swap (e[j],e[j+1]);
    	}//sort ,catch sort
    	for (int i=0;i<d;i++)
    	b[i]=e[i];//num turn
    	return;
    }
    int main()
    {
    	cin>>b>>c>>d>>e>>f;//d=>a[0];e=>a[1];f=>D
    	for (int i=0;i<f;i++)
    	{
    		cin>>g>>h>>k>>l;
    		if (g==k)
    		a[1][min(h,l)]++;//x=x  =>  row=row  =>  cut line;
    		if (h==l)
    		a[0][min(g,k)]++;
    	}
    	pai (a[0],m[0],b,d);
    	pai (a[1],m[1],c,e);
    	sort (m[0],m[0]+d);
    	sort (m[1],m[1]+e);//resort <<<
    	for (int i=0;i<d;i++)
    	{
    		cout<<m[0][i];
    		if (i!=d-1)
    		cout<<" ";
    	}
    	cout<<endl;
    	for (int i=0;i<e;i++)
    	{
    		cout<<m[1][i];
    		if (i!=e-1)
    		cout<<" ";
    	}//cout
    	return 0;
    }
    

    信息

    ID
    164
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    15
    已通过
    9
    上传者