zoukankan      html  css  js  c++  java
  • 洛谷 P1056 排座椅


    1.朴素算法

    贪心

    输入数据时进行记录,

    譬如4 2 4 3

    说明在 2列 和 3列 中同学说话 记录一下

    2 3 3 3

    说明在 2行 和 3行 中同学说话 记录一下

    找出说话列最多 行最多的 按人数排位置序 输出位置

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    typedef long long ll;
    const int MAXN = 1010;
    int ah[1100] = {0}, al[1100] = {0};
    int ph[1100], pl[1100];
    int main()
    {
    	for(int i = 0; i < 1100; i++)
    	{
    		ph[i] = i;
    		pl[i] = i;
    	}
    	int M, N, K, L, D;
    	cin>>M>>N>>K>>L>>D;
    	int tmp = D;
    	while(tmp--)
    	{
    		int tx, ty, ta, tb;
    		cin>>tx>>ty>>ta>>tb;
    		if(tx == ta)
    		{
    			al[min(ty, tb)] ++;
    		}
    		else if(ty == tb)
    		{
    			ah[min(tx, ta)] ++;
    		}
    	}
    
    	for(int i = 0; i < MAXN; i++)
    	{
    		for(int j = i + 1; j < MAXN; j++)
    		{
    			if(al[i] < al[j])
    			{
    				swap(al[i], al[j]);
    				swap(pl[i], pl[j]);
    			}
    		}
    	}
    	
    	for(int i = 0; i < MAXN; i++)
    	{
    		for(int j = i + 1; j < MAXN; j++)
    		{
    			if(ah[i] < ah[j])
    			{
    				swap(ah[i], ah[j]);
    				swap(ph[i], ph[j]);
    			}
    		}
    	}
    	sort(ph, ph + K);
    	sort(pl, pl + L);
    	for(int i = 0; i < K; i++)
    	{
    		cout<<ph[i]<<' ';
    	}	
    	cout<<endl;
    	for(int i = 0; i < L; i++)
    	{
    		cout<<pl[i]<<' ';
    	}
    	return 0;
    }

    可以用快排提升程序效率 以行列为关键字排位置

    #include <iostream>
    using namespace std;
    
    const int MAXN = 1010;
    
    int arrh[MAXN], arrl[MAXN];
    int parrh[MAXN], parrl[MAXN];
    
    void qsort(int *arr, int *brr, int fst, int lst)
    {
    	int i = fst, j = lst;
    	int mid = arr[(i + j) / 2];
    	while(i <= j)
    	{
    		while(arr[i] < mid)
    			i++;
    		while(arr[j] > mid)
    			j--;
    		if(i <= j)
    		{
    			swap(arr[i], arr[j]);
    			swap(brr[i], brr[j]);
    			i++;
    			j--;
    		}
    	}
    	if(i < lst)
    		qsort(arr, brr, i, lst);
    	if(j > fst)
    		qsort(arr, brr, fst, j);
    }
    
    int main()
    {
    	
    	for(int i = 0; i < MAXN; i++)
    	{
    		parrh[i] = i;
    		parrl[i] = i;	
    	}
    	
    	int n, m, h, l, t;
    	cin>>n>>m>>h>>l>>t;
    	int ta, tb, tc, td;
    	while(t--)
    	{
    		cin>>ta>>tb>>tc>>td;
    		if(ta == tc)
    		{
    			arrl[ min(tb, td) ] ++;
    		}
    		else if(tb == td)
    		{
    			arrh[ min(ta, tc) ] ++;
    		}
    	}
    	qsort(arrl,parrl, 0, MAXN - 1);
    	qsort(arrh,parrh, 0, MAXN - 1);
    	qsort(parrl, arrl, MAXN - l, MAXN - 1);
    	qsort(parrh, arrh, MAXN - h, MAXN - 1);
    	for(int i = MAXN - h; i < MAXN ; i++)
    	{
    		cout<<parrh[i]<<' ';
    	}
    	cout<<endl;
    	for(int i = MAXN - l; i < MAXN ; i++)
    	{
    		cout<<parrl[i]<<' ';
    	}
    	return 0;
    }






  • 相关阅读:
    端口扫描技术
    HBase——常用命令
    RabbitMQ——常用命令
    RabbitMQ——基于 KeepAlived + HAProxy 搭建 RabbitMQ 高可用负载均衡集群
    RabbitMQ——安装、集群搭建、镜像队列配置
    Zookeeper——常用命令
    MFC子对话框嵌入主对话框
    Find a way
    Avoid The Lakes
    变形课
  • 原文地址:https://www.cnblogs.com/zeolim/p/12270649.html
Copyright © 2011-2022 走看看